2011-01-28 192 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個現有Explorer進程,並用一個新的更換:

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窗口(如果存在)來啓動Explorer?

+0

如果您的用戶有一個資源管理器窗口打開到一個目錄由於其他原因,並不想成爲從該目錄中取出?你認爲這種方法會導致你的用戶感到沮喪嗎? – Phil 2011-01-28 17:31:01

+0

這是一個值得關注的問題,但我的用戶表示他們只是說他們想重新使用任何現有的資源管理器窗口,而不是讓我的應用每次都打開新的副本。否則,我不得不確定哪些瀏覽器窗口是由我的應用程序打開的,只能重新使用這些窗口。 – 2011-01-28 18:41:31

回答

1

IShellWindows COM界面會給你一個打開的資源管理器窗口列表,你可以獲取並設置任何資源管理器窗口的地址,參見this blog entry獲取C++示例。我懷疑.NET有一個本地實現這個,所以你可能需要PInvoke

0

另一種選擇是(如果你不知道你已經打開/想要重用的資源管理器窗口的HWND)枚舉和查找窗口的標題「看起來像」你想要什麼,然後指示該窗口來到前臺。它不會透露你想要在其中的確切文件,但它可能比其他選項更簡單:)