2012-11-19 42 views
7

我正在尋找一種方法來關閉打開到某個文件夾的Windows資源管理器窗口。說c:\ users \ bob \文件夾。我可以用下面的代碼關閉所有的探索者,但這顯然不是我想要做的。這可能嗎?有沒有辦法用C#關閉瀏覽器的特定實例?

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

感謝

+0

你打開自己這個探險家嗎?如果是這樣,你可以堅持進程ID。 – Blorgbeard

+0

不,我沒有。謝謝。 – AngryTech

回答

15

在這篇文章中讓我最有方式:http://omegacoder.com/?p=63

我發現使用名爲「Microsoft Internet控制」一個COM庫的方式,看起來更預期對於Internet Explorer,但我放棄了嘗試使用進程ID和MainWindowTitle的東西,因爲explorer.exe只對所有打開的窗口使用一個進程,並且我無法確定如何從中獲取窗口標題文本或文件系統位置。

因此,首先,從COM選項卡添加到Microsoft Internet控件的引用,則:

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(); 
     }  
} 

一個警告,而這可能是由於事實上這個庫是面向IE瀏覽器的,你必須在文件夾路徑中使用正斜槓......這是因爲從ie對象返回的真正LocationURL的形式是file:///C:/Users/...

+1

嘿,這很聰明。謝謝! – AngryTech

+1

很高興能幫到你!我喜歡你可以使用它的IE窗口以及...我在想一個經理走動恐慌按鈕? ;) –

+1

我可能會遲到這次派對,但是這幫了我很大的忙,救了我這麼多無用的研究時間,所以我不得不親自謝謝你:) – Sossenbinder

1

您可以嘗試這樣的事:

foreach (Process p in Process.GetProcessesByName("explorer")) 
{ 
    if (p.MainWindowTitle.ToLower().Contains(@"c:\users\bob\folder")) 
    p.Kill(); 
} 
0
foreach (Process p in Process.GetProcessesByName("explorer")) 
{ 
    if (p.MainWindowTitle.Contains("YourFolderName")) 
    { 
     p.Kill(); 
    } 
} 
+0

我只看到一個進程對於Windows 7中的多個資源管理器實例,標題爲空。 –

相關問題