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

Posted

技术标签:

【中文标题】在没有 BHO 的情况下以编程方式确定 IE 窗口当前 URL【英文标题】:Determine IE window current URL programmatically without BHO 【发布时间】:2011-03-10 06:55:08 【问题描述】:

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

我能够想到完成此类功能的唯一方法是查看窗口的标题而不是 URL,但这似乎很老套。

另一方面,我假设存储 URL 的文本框有一个句柄,我附加到该句柄上并阅读该文本。我在这个假设中正确吗?

任何指导将不胜感激。

PS:如果您能提供一个也适用于 Firefox 的示例/指导,则可以加分。

编辑:好的,所以进一步的研究开始发现我需要查看的是 GetWindowText 和消息 WM_GETTEXT。如果我解决了这一切,将发布答案。

【问题讨论】:

"如果您能提供一个也适用于 Firefox 的示例/指导,则可以获得奖励积分。" - 如果不为每个浏览器编写特定代码,几乎不可能做到这一点。此外,Firefox 可能很难,因为它使用自定义控件 (afaik),甚至可能没有窗口句柄。 @ThiefMaster:所有浏览器都实现的Accessibility方式(MSAA或其他)总是有的,组件的搜索补丁会有所不同但基础相同,并且可能不会经常更改作为 HWND 【参考方案1】:

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

您可以使用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

【讨论】:

以上是关于在没有 BHO 的情况下以编程方式确定 IE 窗口当前 URL的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9:如何在不显示系统条形音箱弹出窗口的情况下以编程方式更改音量?

在不活动的情况下以编程方式停止 AWS EC2

在没有情节提要的情况下以编程方式添加容器视图?

如何在没有情节提要的情况下以编程方式实例化视图控制器

在没有按钮连接的情况下以编程方式执行 Segue?

如何在没有 XML 的情况下以编程方式将片段添加到活动