2010-07-20 9 views
5

Ich versuche, die URL aus der Adressleiste von IE zu extrahieren. (IE 8 unter Windows 7) mit dem folgenden C# -Code.Zugriff verweigert - beim Versuch, die URL (Text) aus der Adressleiste

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

Der GetWindowText Aufruf gibt eine "Zugriff verweigert" Ausnahme. Wenn die App mit Administratorrechten ausgeführt wird, wird ein "System kann die angegebene Datei nicht finden" ausgelöst.

Irgendwelche Ideen?

Antwort

2

GetWindowText() kann den Text einer Kontrolle in einem anderen Prozess nicht abrufen, anstatt Sie SendMessage() mit WM_GETTEXTLENGTH/WM_GETTEXT verwenden sollten.

Bearbeiten; Version Agnostiker Weise:

(Add ref c: \ WINDOWS \ system32 \ shdocvw.dll)

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

Dank! SHDocVw ist eine brillante Referenz! Ich denke jedoch, dass ich mich an die GetText-Methode halten muss, weil ich in den meisten gängigen Browsern für Windows - Chrome, Firefox, Safari, Opera - dasselbe tun muss. Mein Plan war, eine benutzerdefinierte Methode für jeden Browser zu schreiben, um die URL aus der Adressleiste zu extrahieren. – Sameet

Verwandte Themen