C#アプリケーションから現在Windowsエクスプローラで選択されているファイルのリストを取得できますか?C#アプリケーションからWindowsExplorerの現在の選択を取得しますか?
私はC#のような管理言語からWindowsエクスプローラとやり取りするさまざまな方法について多くの研究を行ってきました。最初は、シェル拡張の実装(例えばhereとhere)を見ていましたが、明らかにそれは管理コード内からは悪い考えであり、とにかく私の状況にとっては残酷かもしれません。
次は、私がのPInvoke/COMのソリューションに見て、this articleを発見し、このコードに私を導いた:
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
ArrayList windows = new ArrayList();
foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if(filename.Equals("explorer"))
{
Console.WriteLine("Hard Drive: {0}", ie.LocationURL);
windows.Add(ie);
var shell = new Shell32.Shell();
foreach (SHDocVw.InternetExplorerMedium sw in shell.Windows())
{
Console.WriteLine(sw.LocationURL);
}
}
}
を...しかし、個々のInternetExplorer
オブジェクトは、現在のファイルの選択を取得するためには、メソッドを持っていません、それらはウィンドウに関する情報を取得するために使用できます。
次に、私はthis articleが、私が必要としていたものを正確に実行していることを発見しました。これを出発点として、shell32.dll
を参考にして翻訳を試みました。私は窓のために、各項目についてFolder
オブジェクトを取得することができていますので、これは、やや近かった
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
ArrayList windows = new ArrayList();
foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if(filename.Equals("explorer"))
{
Console.WriteLine("Hard Drive: {0}", ie.LocationURL);
windows.Add(ie);
var shell = (Shell32.IShellDispatch4)new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(ie.LocationURL);
Shell32.FolderItems items = folder.Items();
foreach (Shell32.FolderItem item in items)
{
...
}
}
}
が、私はまだ現在の選択を取得する方法が表示されていない:私は次のようになってしまいました。
私は完全に間違った場所で見ているかもしれませんが、私は私が持っている唯一のリードに従っています。誰も私に適切なPInvoke/COMソリューションを指摘できますか?