2010-07-20 12 views
5

Estoy intentando extraer la URL de la barra de direcciones de IE. (IE 8 en Windows 7) usando el siguiente código C#.Acceso denegado - cuando se trata de obtener la dirección URL (texto) del mango de la barra de direcciones

 static string GetUrlFromIE() 
     { 
      IntPtr windowHandle = APIFuncs.getForegroundWindow(); 
      IntPtr childHandle; 
      String strUrlToReturn = ""; 

      //try to get a handle to IE's toolbar container 
      childHandle = APIFuncs.FindWindowEx(windowHandle, IntPtr.Zero, "WorkerW", IntPtr.Zero); 
      if (childHandle != IntPtr.Zero) 
      { 
       //get a handle to address bar 
       childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "ReBarWindow32", IntPtr.Zero); 
       if (childHandle != IntPtr.Zero) 
       { 
        childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Address Band Root", IntPtr.Zero); 
        if (childHandle != IntPtr.Zero) 
        { 
         childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Edit", IntPtr.Zero); 
         if (childHandle != IntPtr.Zero) 
         { 
          strUrlToReturn = new string((char)0, 256); 
          GetWindowText(hwnd, strUrlToReturn , strUrlToReturn.Length); 
         } 
        } 
       } 
      } 
      return strUrlToReturn; 
     } 

La llamada a GetWindowText devuelve una excepción de "Acceso denegado". Al ejecutar la aplicación con privilegios de administrador, arroja un "Sistema no puede encontrar el archivo especificado".

¿Alguna idea?

Respuesta

2

GetWindowText() no se puede recuperar el texto de un control en otro proceso, en su lugar debe usar SendMessage() con WM_GETTEXTLENGTH/WM_GETTEXT.

Editar; Versión manera agnóstica:

(Agregar una referencia a C: \ WINDOWS \ system32 \ shdocvw.dll)

using SHDocVw; 
. 
. 
foreach (InternetExplorer ieInst in new ShellWindowsClass()) 
    Console.WriteLine(ieInst.LocationURL); 
+0

Gracias! ¡SHDocVw es una referencia brillante! Sin embargo, la razón por la que creo que tendré que apegarme a la metodología GetText es porque necesito hacer lo mismo en la mayoría de los navegadores populares para Windows: Chrome, Firefox, Safari, Opera. Mi plan era escribir un método personalizado para cada navegador para extraer la URL de su barra de direcciones. – Sameet

Cuestiones relacionadas