Get url from all open tabs in Google Chrome using VB .Net and UI Automation

后端 未结 1 1594
-上瘾入骨i
-上瘾入骨i 2021-01-15 13:55

Hello I have this code working to get current url on Chrome, but only get active tab url. I need to get url from all open tabs using UI Automation.

My working code:<

1条回答
  •  野的像风
    2021-01-15 14:32

    you better try this way

    Imports NDde.Client 'import the NDde library for firefox
    Imports System.Runtime.InteropServices
    
    'For Chrome
    Private Const WM_GETTEXTLENGTH As Integer = &He
    Private Const WM_GETTEXT As Integer = &Hd
    
     _
    Private Shared Function SendMessage(hWnd As IntPtr, Msg As UInteger, wParam As Integer, lParam As Integer) As Integer
    End Function
     _
    Private Shared Function SendMessage(hWnd As IntPtr, Msg As UInteger, wParam As Integer, lParam As StringBuilder) As Integer
    End Function
     _
    Private Shared Function FindWindowEx(parentHandle As IntPtr, childAfter As IntPtr, className As String, windowTitle As String) As IntPtr
    End Function
    
    Public Shared Function getChromeUrl(winHandle As IntPtr) As String
        Dim browserUrl As String = Nothing
        Dim urlHandle As IntPtr = FindWindowEx(winHandle, IntPtr.Zero, "Chrome_AutocompleteEditView", Nothing)
        Const nChars As Integer = 256
        Dim Buff As New StringBuilder(nChars)
        Dim length As Integer = SendMessage(urlHandle, WM_GETTEXTLENGTH, 0, 0)
        If length > 0 Then
            SendMessage(urlHandle, WM_GETTEXT, nChars, Buff)
            browserUrl = Buff.ToString()
    
            Return browserUrl
        Else
            Return browserUrl
        End If
    
    End Function
    
    Public shared Function GetChromeHandle() As Intptr
     Dim ChromeHandle As IntPtr = Nothing
     Dim Allpro() As Process = Process.GetProcesses();
     For Each pro As Process in Allpro
      if pro.ProcessName = "chrome"
      ChromeHandle = pro.MainWindowHandle
      Exit For
      End if
     Next     
    Return ChromeHandle
    End Function
    
    'USAGE FOR CHROME
     Dim CHandle As IntPtr = GetChromeHandle()
     If Not CHandle,Equals(Intptr.Zero)
     Dim url As String = getChromeUrl(CHandle)
     End If
    

    Source and read more

    EDIT :

    i found my own way and it worked for me

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

    usage :

    If proc IsNot Nothing Then
        Dim browserName as string = "Google Chrome"
        Dim className as String = "Edit" 
        Dim s As String = 
    GetCurrentUrl(proc.MainWindowHandle, browserName, className, ComboBox1)
        If s <> "" Then
            Msgbox.show(s)
            ComboBox1.SelectedIndex = 0 'Window list
        Else
    
        End If
    Else
        Label1.Text = browserName & " is not available"
    end If
    

    hope it helps :))))

    0 讨论(0)
提交回复
热议问题