C# 在没有BHO的情况下以编程方式确定IE窗口当前URL

C# 在没有BHO的情况下以编程方式确定IE窗口当前URL,c#,internet-explorer,firefox,interprocess,C#,Internet Explorer,Firefox,Interprocess,有人可以指导我如何在没有BHO的情况下通过编程确定IE的当前URL吗 我能想到的实现这类功能的唯一方法是查看窗口的标题,而不是URL,但这似乎有点骇人听闻 另一方面,我假设存储URL的文本框将有一个句柄,我将其附加到该句柄并读取文本。我的假设正确吗 任何指导都将不胜感激 附言:如果你能提供一个同样适用于Firefox的示例/指导,你就可以获得额外的积分 编辑:好的,进一步的研究开始发现我需要看的是GetWindowText和消息WM_GETTEXT。如果我把这些都解决了,我会发布答案。这是一篇非

有人可以指导我如何在没有BHO的情况下通过编程确定IE的当前URL吗

我能想到的实现这类功能的唯一方法是查看窗口的标题,而不是URL,但这似乎有点骇人听闻

另一方面,我假设存储URL的文本框将有一个句柄,我将其附加到该句柄并读取文本。我的假设正确吗

任何指导都将不胜感激


附言:如果你能提供一个同样适用于Firefox的示例/指导,你就可以获得额外的积分


编辑:好的,进一步的研究开始发现我需要看的是GetWindowText和消息WM_GETTEXT。如果我把这些都解决了,我会发布答案。

这是一篇非常古老的帖子,但我偶然发现了它,所以我想我会尝试回答它,因为我刚刚学会了:)

你可以用电脑来做。您可以遍历打开的窗口,查找任何“HTTPDocumentClass”对象(这些是Internet Explorer窗口),然后您可以访问成员以查找URL

我不知道如何用C#编写一个示例,但下面是如何用VB编写的。
注意:您需要添加对Microsoft Shell控件和自动化以及Microsoft Internet控件的引用


“如果你能提供一个同样适用于Firefox的示例/指导,那么你就可以获得额外的积分。”-如果不为每个浏览器编写特定的代码,这几乎是不可能做到的。此外,firefox可能很难使用自定义控件(afaik),因为它甚至可能没有windows句柄。@ThiefMaster:所有浏览器都有可访问性的实现方式(MSAA或其他),组件的搜索修补程序会有所不同,但基础是相同的,并且不会像HWNDs那样经常更改
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