2011-03-10 59 views
0

有人能指導我如何以編程方式確定IE沒有BHO的方向嗎?以編程方式確定IE窗口當前URL沒有BHO

我已經能夠想到完成這種功能的唯一方法是通過查看窗口的標題而不是URL,但這看起來很詭異。

另一方面,我認爲存儲URL的文本框會有一個我附加並閱讀文本的句柄。我在這個假設中糾正了嗎?

任何指導,將不勝感激。

PS:如果您可以提供一個可以與Firefox一起使用的示例/指導,也可以獲得獎勵積分。

編輯:好的,所以進一步的研究開始發現我需要看的是GetWindowText和消息WM_GETTEXT。如果我得到這一切,會發布答案。

+0

「如果您可以提供一個可以與Firefox一起使用的示例/指導,也可以獲得獎勵積分。」 - 如果不爲每個瀏覽器編寫特定的代碼,幾乎不可能做到這一點。另外,它可能很難用firefox,因爲它使用可能甚至沒有窗口句柄的自定義控件(afaik)。 – ThiefMaster 2011-03-10 07:20:51

+1

@ ThiefMaster:總是有所有瀏覽器實現的輔助功能(MSAA或其他),組件的搜索補丁將有所不同,但基礎是相同的,並且它可能不會像HWND那樣頻繁更改 – 2011-03-10 09:22:01

回答

0

所以這是一個REALLLLLY舊的文章,但我偶然發現了它,想我會嘗試回答它,因爲我剛剛得知這個:)

可以使用the Windows Shell做到這一點。您可以遍歷打開的窗口並查找任何「HTTPDocumentClass」對象(這些是Internet Explorer窗口),然後您可以訪問.LocationUrl成員來查找URL。

我不知道如何在C#中編寫示例,但以下是在VB中如何實現的示例。
注:您需要添加對的引用Microsoft Shell Controls and AutomationMicrosoft Internet Controls

Imports Shell32 
Imports SHDocVw 

Public Function GetIExplorerURL() As String() 
    Dim exShell As New Shell32.Shell 
    Dim URLs As New List(Of String) 
    For Each window As SHDocVw.ShellBrowserWindow In DirectCast(exShell.Windows, SHDocVw.IShellWindows) 
     If TypeName(window.Document) = "HTMLDocumentClass" Then 
      URLs.Add(window.LocationURL) 
     End If 
    Next 

    Return URLs.ToArray 
End Function 
相關問題