11

特定のフォルダーに対して開いている Windows エクスプローラー ウィンドウを閉じる方法を探しています。c:\users\bob\folder と言います。以下のコードですべてのエクスプローラーを閉じることができますが、これは明らかに私がやりたいことではありません。これは可能ですか?

 foreach (Process p in Process.GetProcessesByName("explorer"))
 {
    p.Kill();
 }

ありがとう

4

4 に答える 4

21

この記事は、ほとんどの道のりを私にもたらしました: http://omegacoder.com/?p=63

MainWindowTitleInternet 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 がフォームにあるためです。iefile:///C:/Users/...

于 2012-11-19T23:36:59.017 に答える
2

user32.dll をインポートして、FindWindow または FindWindowByCaption を呼び出し、続いて DestroyWindow を呼び出してみます。

FindWindow に関する情報はこちら: http://www.pinvoke.net/default.aspx/user32.findwindow

于 2012-11-19T23:10:06.887 に答える