65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VB.NET 获取当前浏览器 URL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.46/5 (10投票s)

2011 年 6 月 1 日

CPOL

2分钟阅读

viewsIcon

144279

downloadIcon

12658

获取浏览器 URL

引言

本文档解释了如何使用 VB.NET 获取浏览器中的当前 URL。演示程序展示了如何在 Windows Internet Explorer 和 Google Chrome 中实现此功能。

背景

为了我的一个 VB.NET 程序,我希望能够获取当前浏览器的 URL;当然,我可以复制粘贴,但如果程序能够自动获取,那就更好了。因此,我在互联网上搜索,找到了许多“解决方案”,但它们要么是用 C 编写的,要么对我来说根本不起作用(至少对我而言)。在阅读了各种论坛后,我决定调整其中一个解决方案,并成功地从 Internet Explorer 和 Chrome 中获取了 URL;尝试从 Firefox 中获取 URL 却未能成功。

我的开发配置是:Microsoft Visual Basic 2008 Express,Windows7 Home Premium 64 位,IE9,Chrome 11.0.696.68,Firefox 4。该代码也已在 Vista 32 位上进行了测试。代码中引用了基本思想和论坛建议。

代码位于 CurrentUrl.vb 模块中,您可以将其添加到您的项目中。在您的代码中,您应该首先验证浏览器(Internet Explorer 或 Chrome)是否可用。

例如

...
Dim appName As String = "iexplore"
Dim proc As System.Diagnostics.Process = GetBrowser(appName)
...
Private Function GetBrowser(ByVal appName) As System.Diagnostics.Process
    Dim pList() As System.Diagnostics.Process =  
 System.Diagnostics.Process.GetProcessesByName(appName)
    For Each proc As System.Diagnostics.Process In pList
        If proc.ProcessName = appName Then
            Return proc
        End If
    Next
    Return Nothing
End Function
...	

如果返回了浏览器进程,请使用以下参数调用 CurrentUrl.vb 中的 GetCurrentUrl 函数

  • 浏览器窗口句柄:proc.MainWindowHandle
  • 浏览器名称:“Windows Internet Explorer”或“Google Chrome”
  • 要查找的窗口的类名:“Edit”用于 IE,“Chrome_AutocompleteEditView”用于 Chrome
  • (可选) 一个 combobox 来获取浏览器窗口的“treeview”,直到目标窗口;如果不需要,则传递 Nothing
...
If proc IsNot Nothing Then
    Dim browserName as string = "Windows Internet Explorer"
    Dim className as String = "Edit" 
    Dim s As String = 
GetCurrentUrl(proc.MainWindowHandle, browserName, className, ComboBox1)
    If s <> "" Then
        TextBox1.Text = s
        ComboBox1.SelectedIndex = 0 'Window list
    Else
        Label1.Text = "Current URL is not available"
    End If
Else
    Label1.Text = browserName & " is not available"
end If
...

在 CurrentUrl.vb 内部

该模块包含一个简单的概述、基于其构建的来源的引用,以及所需的 Windows 函数和常量的定义,以及一些 private 变量。

GetCurrentUrl 是唯一的 public 函数;它调用 private EnumWindows 函数来获取窗口句柄,直到找到浏览器窗口,然后查找包含 URL 的子窗口。URL string 将返回到您的程序。

关注点

在引用的来源中,目标窗口的搜索从顶级窗口(Intptr.Zero)开始,并返回一个 URL 列表。我的方法从浏览器窗口(proc.MainWindowHandle)开始;我使用了 GetBrowser 并调试了 CurrentUrl ,直到找到具有适当类名的目标窗口,以获取单个 URL。不幸的是,这对于 Firefox 不起作用,它需要完全不同的方法来获取窗口句柄(请参阅 Firefox Access)。

历史

  • 2011 年 5 月 - 首次发布
  • 2011 年 6 月 - 源代码已更新,启用 Option Strict On
© . All rights reserved.