特定のフォルダーに対して開いている Windows エクスプローラー ウィンドウを閉じる方法を探しています。c:\users\bob\folder と言います。以下のコードですべてのエクスプローラーを閉じることができますが、これは明らかに私がやりたいことではありません。これは可能ですか?
foreach (Process p in Process.GetProcessesByName("explorer"))
{
p.Kill();
}
ありがとう
この記事は、ほとんどの道のりを私にもたらしました: http://omegacoder.com/?p=63
MainWindowTitle
Internet Explorer 向けの「Microsoft Internet Controls」という COM ライブラリを使用する方法を見つけましたが、explorer.exe は開いているすべてのウィンドウに対して 1 つのプロセスしか使用せず、プロセス ID などを使用することをあきらめました。そこからウィンドウ タイトル テキストまたはファイル システムの場所を取得する方法を突き止めます。
まず、[COM] タブから Microsoft Internet Controls への参照を追加してから、次のようにします。
using SHDocVw;
この小さなルーチンは私にとってはうまくいきました:
ShellWindows _shellWindows = new SHDocVw.ShellWindows();
string processType;
foreach (InternetExplorer ie in _shellWindows)
{
//this parses the name of the process
processType = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
//this could also be used for IE windows with processType of "iexplore"
if (processType.Equals("explorer") && ie.LocationURL.Contains(@"C:/Users/Bob"))
{
ie.Quit();
}
}
1 つの注意点は、おそらくこのライブラリが IE 向けであるために、フォルダー パスにスラッシュを使用する必要があることです。オブジェクトLocationURL
から返される true がフォームにあるためです。ie
file:///C:/Users/...
user32.dll をインポートして、FindWindow または FindWindowByCaption を呼び出し、続いて DestroyWindow を呼び出してみます。
FindWindow に関する情報はこちら: http://www.pinvoke.net/default.aspx/user32.findwindow