【问题标题】:How to get URL of active tab in browser in VB.net如何在 VB.net 的浏览器中获取活动选项卡的 URL
【发布时间】:2018-10-25 10:53:10
【问题描述】:

我正在编写一个应用程序以在 Chrome 浏览器中捕获活动标签的 URL。我浏览了一些代码,所有这些代码都会导致 GUI 冻结并且需要很长时间才能获取 URL。我真正想要的是获取活动标签的 URL。就是这样。这是我用过的。非常感谢您的帮助。

Imports System.Windows.Automation

Public Class Form1
    Private Const ChromeProcess As [String] = "chrome"
    Private Const AddressCtl As [String] = "Address and search bar"
Public Function GetChromeActiveWindowUrl() As [String]
    Dim procs = Process.GetProcessesByName(ChromeProcess)

    If (procs.Length = 0) Then
        Return [String].Empty
    End If

    Return procs _
.Where(Function(p) p.MainWindowHandle <> IntPtr.Zero) _
.Select(Function(s) GetUrlControl(s)) _
.Where(Function(p) p IsNot Nothing) _
.Select(Function(s) GetValuePattern(s)) _
.Where(Function(p) p.Item2.Length > 0) _
.Select(Function(s) GetValuePatternUrl(s)) _
.FirstOrDefault

End Function

Private Function GetUrlControl(
proses As Process) _
As AutomationElement

    Dim propCondition =
    New PropertyCondition(
    AutomationElement.NameProperty,
    AddressCtl)
    Return AutomationElement _
    .FromHandle(proses.MainWindowHandle) _
    .FindFirst(
        TreeScope.Descendants,
        propCondition)

End Function

Private Function GetValuePatternUrl(
element As Tuple(Of
AutomationElement, AutomationPattern())) As [String]

    Dim ap = element.Item2(0)
    Dim ovp = element.Item1.GetCurrentPattern(ap)
    Dim vp = CType(ovp, ValuePattern)

    Return vp.Current.Value
End Function



Private Function GetValuePattern(
element As AutomationElement) _

作为元组(的 自动化元素, 自动化模式())

      Return New Tuple(Of
      AutomationElement,
      AutomationPattern())(
      element,
      element.GetSupportedPatterns())
End Function

【问题讨论】:

  • 这是浏览器插件吗?
  • 不适用于 VB.Net 应用程序
  • 如果它是一个 Web 应用程序,而不是内置在浏览器中。或者浏览器扩展,那么出于安全原因,您将无法访问用户的浏览会话。因此,获取有关用户打开了哪些选项卡或哪些选项卡处于活动状态的信息将是禁止的

标签: vb.net google-chrome url ui-automation freeze


【解决方案1】:

终于找到了我的问题的答案,

我已经阻止了从其他应用程序接收的请求,并且只关注 chrome 浏览器

Dim hWnd As IntPtr = GetForegroundWindow()
Dim ProcessID As UInt32 = Nothing
GetWindowThreadProcessId(hWnd, ProcessID)
Dim Proc As Process = Process.GetProcessById(ProcessID)
str_application_category = Proc.MainModule.FileVersionInfo.ProductName

If str_application_category = "Google Chrome" Then
str_application_path = GetChromeActiveWindowUrl()
End If

Catch ex As Exception

End Try

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多