¿Hay una manera de cerrar una instancia particular del explorador con C #?

Estoy buscando una manera de cerrar una ventana del explorador de Windows que esté abierta a una carpeta determinada. Diga c: \ users \ bob \ folder. Puedo cerrar a todos los exploradores con el código de abajo, pero obviamente esto no es lo que quiero hacer. es posible?

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

Gracias

Este artículo que me llevó casi todo el camino allí: http://omegacoder.com/?p=63

Encontré una forma de usar una biblioteca de COM llamada “Microsoft Internet Controls” que parece estar más destinada a Internet Explorer, pero desistí de usar los identificadores de proceso y las cosas de MainWindowTitle ya que explorer.exe solo usa un proceso para todas las ventanas abiertas y no puedo No especifique cómo obtener el texto del título de la ventana o la ubicación del sistema de archivos.

Entonces, primero, agregue una referencia a los controles de Internet de Microsoft desde la pestaña COM, luego:

 using SHDocVw; 

Esta pequeña rutina hizo el truco para mí:

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

Una advertencia, y probablemente debido al hecho de que esta biblioteca está orientada a IE, es que tiene que usar barras diagonales en la ruta de su carpeta … Esto se debe a que la verdadera LocationURL que proviene del objeto ie está en el file:///C:/Users/... formulario file:///C:/Users/...

Intentaría importar user32.dll y llamar a FindWindow o FindWindowByCaption, seguido de una llamada a DestroyWindow.

La información sobre FindWindow está aquí: http://www.pinvoke.net/default.aspx/user32.findwindow

Puedes probar algo como esto:

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