2011-01-28 12 views
3

explorer.exeの起動を頻繁に使用するアプリケーションがあります。私は、プロセスを開始するたびに新しい/既存のエクスプローラウィンドウを作成するのではなく、既存の/既に開いているエクスプローラウィンドウを再利用したいと思います。ここでエクスプローラを起動するために既存の/既に開いているWindowsエクスプローラウィンドウを再利用する方法

は私のコードは次のようになります。

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo 
     { 
      UseShellExecute = true, 
      FileName = "Explorer.exe", 
      Arguments = myDirectoryPath 
     }; 
     System.Diagnostics.Process.Start(info); 

が、私はこれを行うにはcommand-lineスイッチを見ていません。私が試した一つのアプローチは、単に任意の1つの既存のエクスプローラのプロセスを強制終了し、新しいものと交換することでした:

var processes = System.Diagnostics.Process.GetProcesses(Environment.MachineName);int kills = 0; 
     for (int i = 0; i < processes.Length; i++) 
     { 
      System.Diagnostics.Process p = processes[i]; 
      if (p.ProcessName == "explorer" && kills < 1) 
            ++kills 
       p.Kill(); 
     } 

しかし、これはただ1つのプロセスを殺すが、そのように完全エクスプローラを殺していないの不要な効果になりさえタスクバーが消えます。

エクスプローラウィンドウが存在する場合は、既存のエクスプローラウィンドウを使用してExplorerを起動するにはどうすればよいですか?

+0

あなたのユーザーが他の理由でディレクトリに開いているエクスプローラウィンドウを持っていて、そのディレクトリから取り出した?このアプローチがユーザーに不満を抱かせる原因になると思いますか? – Phil

+0

これは有効な懸案事項ですが、私のユーザーは毎回自分のアプリで毎回新しいコピーを開くのではなく、既存のエクスプローラウィンドウを再利用したかったと言っています。さもなければ、私はどのエクスプローラウィンドウが私のアプリによって開かれたのかを正確に判断し、それらを再利用するだけです。 –

+0

も参照してくださいhttp://stackoverflow.com/questions/3010305/programmatically-selecting-file-in-explorer – rogerdpack

答えて

1

IShellWindows COMインターフェイスを使用すると、エクスプローラウィンドウの一覧が表示されます。エクスプローラウィンドウのアドレスを取得および設定できます。this blog entryのC++サンプルを参照してください。私は.NETがこれをネイティブに実装しているとは思わないので、おそらくPInvokeにする必要があるでしょう。

+0

これは参考になるかもしれませんが、私は見ていますが、私は "これを行う方法のコードスニペット... " –

+0

既存のウィンドウを再利用するためのコマンドラインオプションはありませんか?奇妙な... – rogerdpack

0

もう1つのオプションは、既に開いている/再利用したいエクスプローラウィンドウのHWNDを知らない場合です。あなたが望むもののように見えるタイトルのウィンドウを開き、そのウィンドウをフォアグラウンドに向かわせるように指示します。それは、あなたが望む正確なファイルを明らかにしませんが、他のオプションより簡単かもしれません:)

関連する問題