1

私は小さなヘルパーアプリケーションを作成しようとしています。1つのシナリオは「ファイル複製ファインダー」です。私がしたいのはこれです:

  • C#.NETアプリを起動すると、空のリストが表示されます。
  • 通常のWindowsエクスプローラーを起動し、フォルダー内のファイルを選択します
  • C#アプリは、このファイルに関する情報を教えてくれます(重複など)

「通常の」Windowsエクスプローラーインスタンスで現在選択されているファイルを監視するにはどうすればよいですか。プロセスを処理するには、.NETを使用してインスタンスを起動する必要がありますか?ハンドルが必要ですか、それともC#内で監視できる「グローバルフック」がありますか。クリップボードの監視に少し似ていますが、まったく同じではありません...

どんな助けでもありがたいです(コードがない場合は、適切な相互運用機能、dll、またはヘルプページを教えてください:-)ありがとう、クリス

編集1(現在のソース、Mattiasのおかげで)

using SHDocVw;
using Shell32;

public static void ListExplorerWindows()
{
    foreach (InternetExplorer ie in new ShellWindowsClass())
        DebugExplorerInstance(ie);
}

public static void DebugExplorerInstance(InternetExplorer instance)
{
    Debug.WriteLine("DebugExplorerInstance ".PadRight(30, '='));
    Debug.WriteLine("FullName " + instance.FullName);
    Debug.WriteLine("AdressBar " + instance.AddressBar);
    var doc = instance.Document as IShellFolderViewDual ;
    if (doc != null)
    {
        Debug.WriteLine(doc.Folder.Title);
        foreach (FolderItem item in doc.SelectedItems())
        {
            Debug.WriteLine(item.Path);
        }
    }
}
4

1 に答える 1

1

これは、シェル自動化インターフェースを使用して行うことができます。基本的なプロセスは

  1. Shdocwv.dllおよびShell32.dllでTlbimpを実行します(またはVSから直接参照を追加します)。
  2. ShellWindows コレクションのインスタンスを作成して繰り返します。これには、WindowsエクスプローラーウィンドウとInternetExplorerウィンドウの両方が含まれます。
  3. Windowsエクスプローラーウィンドウの場合、IWebBrowser2.DocumentプロパティはIShellFolderViewDual 参照を返します。
  4. IShellFolderViewDualには、クエリできるSelectedItemsメソッドと、処理できる変更のイベントがあります。
于 2010-03-10T14:34:43.897 に答える