2010-07-20 20 views
5

J'essaie d'extraire l'URL de la barre d'adresse de IE. (IE 8 sur Windows 7) en utilisant le code C# suivant.L'accès est refusé - en essayant d'obtenir l'URL (texte) de la barre d'adresse

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

L'appel GetWindowText renvoie une exception «Accès refusé». En cours d'exécution de l'application avec des privilèges d'administrateur, il lance un "système ne peut pas trouver le fichier spécifié".

Des idées?

Répondre

2

GetWindowText() Impossible de récupérer le texte d'un contrôle dans un autre processus, vous devez à la place utiliser SendMessage() avec WM_GETTEXTLENGTH/WM_GETTEXT.

Modifier; Version façon agnostique:

(Ajouter un ref à c: \ WINDOWS \ system32 \ shdocvw.dll)

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

Merci! SHDocVw est une référence brillante! Cependant, la raison pour laquelle je pense que je devrais m'en tenir à la méthodologie GetText est parce que je dois faire la même chose dans la plupart des navigateurs populaires pour Windows - Chrome, Firefox, Safari, Opera. Mon plan était d'écrire une méthode personnalisée pour chaque navigateur afin d'extraire l'URL de son handle de barre d'adresse. – Sameet