2011-12-09 7 views
5

Tengo mi aplicación que activa el navegador web con una URL específica. Después de que mi programa termine quiero cerrar las páginas web/pestañas que abrí ..¿Cómo obtener la URL de las pestañas del explorador de Internet con el PID de cada pestaña?

Llamando a un archivo EXE con parámetros a. Nombre del proceso b. Cadena presente en la URL

problema detallado How to kill firefox child process/tab from Java/C++

Solía ​​C# enfoque ...

soy capaz de encontrar el ID de proceso de todas las pestañas ..

foreach (Process theprocess in processlist) { 
    if (theprocess.ProcessName == "iexplore") { 
     Console.WriteLine("Process: {0}\tID: {1}\tWindow name: {2}", 
      theprocess.ProcessName, theprocess.Id, theprocess.MainWindowTitle 
     ); 
    } 
} 

Actualmente Puedo obtener solo el título de ventana del proceso ... y en IE8 solo es visible un título de ventana del proceso principal ..

Prov ¿Tengo los pides de cada pestañas, cómo encontrar la URL de la pestaña ... y matar solo esa pestaña?

Tengo esta ayuda de Access is denied - when trying to get the url (text) from address bar's handle

usando SHDocVw; . .

foreach (InternetExplorer ieInst en la nueva ShellWindowsClass()) Console.WriteLine (ieInst.LocationURL);

Respuesta

8

en IE7 y versiones posteriores, a continuación Cifrará matar solo la pestaña que tiene una cadena coincidente en su URL.

foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows()) 
    { 
     String url = ieInst.LocationURL; 
     if (url.Contains("google")) 
     { 
      ieInst.Quit(); 
     } 
    } 

Para enfocar una ficha específica del código es:

foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows()) 
    { 
     String url = ieInst.LocationURL; 
     if (url.Contains("google")) 
     { 
      int val = ieInst.HWND; 
      IntPtr hwnd = new IntPtr(val); 
      ShowWindow(hwnd, SW_MAXIMISE); 
      SetForegroundWindow(hwnd); 
     } 
    } 
+0

gran información, pero ¿por qué estas hablando a ti mismo? : o/ –

+2

Coz evryon lo vio y ningún cuerpo respondió :) hasta que encontré la solución y compartí tat también: P –

+2

El uso de este código arrojará dos errores. Uno debería usar "ShellWindows()" en lugar de "ShellWindowsClass()". –

3

¡Hay una forma de obtener la URL de cada instancia de IExplorer!

Agregue una referencia "Microsoft Internet Controls" al proyecto.

La pieza de código es

**foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindowsClass()) 
     { 
      System.Console.WriteLine(ieInst.LocationURL); 
     }** 

Generar el exe y Interop.SHDocVw.dll

Se trabajará ... :)

Cuestiones relacionadas