2010-07-20 52 views
5

我試圖從IE的地址欄中提取URL。 (Windows 7上的IE 8)使用以下C#代碼。訪問被拒絕 - 試圖從地址欄的句柄獲取url(文本)

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

GetWindowText調用返回「訪問被拒絕」異常。在以管理員權限運行應用程序時,它會引發「系統找不到指定的文件」。

任何想法?

回答

2

GetWindowText()無法在另一個進程中檢索控件的文本,而應該使用SendMessage()WM_GETTEXTLENGTH/WM_GETTEXT

編輯;版本無關方式:

(添加裁判C:\ WINDOWS \ SYSTEM32 \ shdocvw.dll中)

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

謝謝! SHDocVw是一個很好的參考!然而,我認爲我必須堅持使用GetText方法的原因是因爲我需要在Windows的大多數流行瀏覽器中做同樣的事情 - Chrome,Firefox,Safari,Opera。我的計劃是爲每個瀏覽器編寫一個自定義方法,以從其地址欄句柄中提取網址。 – Sameet 2010-07-20 10:22:08