11

Windows エクスプローラーで選択されているファイルの現在のコレクションを取得する必要があります。hereから次のコードを見つけました。

しかし、私はまだそこにいません。一つには、どこGetForegroundWindowから来たのですか?そして別のこととして、コンパイラは次の行で文句を言います

var shell = new Shell32.Shell();

言って

「型または名前空間名 'Shell32' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」. SHDocVw を参照として追加しましたが、まだコンパイラを通過できません。誰かがこれを完了するのを手伝ってくれますか?

    IntPtr handle = GetForegroundWindow();

    ArrayList selected = new ArrayList();
    var shell = new Shell32.Shell();
    foreach(SHDocVw.InternetExplorer window in shell.Windows()) {
        if (window.HWND == (int)handle)
        {
            Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
            foreach(Shell32.FolderItem item in items)
            {
                selected.Add(item.Path);
            }
        }
    }
4

2 に答える 2

8

(エクスプローラーの) ハンドルを取得する必要はありません。

プロジェクトの参照で、COMセクションにあるこれらの参照を追加します。SHDocVw への参照が必要です。これはMicrosoft Internet ControlsCOM オブジェクトでありShell32、Microsoft Shell Controls and Automation COM オブジェクトです。

次に、次を追加します。

using System.Collections;
using Shell32;
using System.IO;

次に、これは機能します:

      string filename;  
      ArrayList selected = new ArrayList();
      foreach (SHDocVw.InternetExplorer window in new SHDocVw.ShellWindows())
      {
        filename = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
        if (filename.ToLowerInvariant() == "explorer")
        {
          Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
          foreach (Shell32.FolderItem item in items)
          {
            selected.Add(item.Path);
          }
        }
      }
于 2013-01-07T10:38:51.310 に答える
1

GetForegroundWindowはWin32API関数であり、これを使用するには、次の説明に従ってインポートする必要があります 。getforegroundwindow(user32)

Shell32の説明は次のとおりです。

C#でシェル32を操作する

最後に、私はあなたのタスクを知りませんが、通常、いくつかのファイルを選択してこのコレクションにアクセスする必要がある場合は、FileOpenDialogを使用する必要があります

于 2013-01-07T09:54:17.393 に答える