3

我正在做一个项目,我需要获取浏览器中所有打开的选项卡的 URL(例如 Google Chrome、IE、Firefox、...)

有没有办法使用 c# 或 vb.net 来做到这一点?

ps它是一个windows窗体应用程序

4

1 回答 1

5

IE:

    Dim browser As SHDocVw.InternetExplorer
    Dim myLocalLink As String
    Dim myDoc As mshtml.IHTMLDocument2
    Dim shellWindows As SHDocVw.ShellWindows = New SHDocVw.ShellWindows()
    Dim filename As String

    For Each ie As SHDocVw.InternetExplorer In shellWindows
        filename = System.IO.Path.GetFileNameWithoutExtension(ie.FullName).ToLower()

        If filename = "iexplore" Then
            browser = ie
            myDoc = browser.Document
            myLocalLink = myDoc.url
            MessageBox.Show(myLocalLink)
        End If
    Next

C#:

        SHDocVw.InternetExplorer browser;
        string myLocalLink;
        mshtml.IHTMLDocument2 myDoc;
        SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
        string filename;
        foreach (SHDocVw.InternetExplorer ie in shellWindows)
        {
            filename = System.IO.Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
            if ((filename == "iexplore"))
            {
                browser = ie;
                myDoc = browser.Document;
                myLocalLink = myDoc.url;
                MessageBox.Show(myLocalLink);
            }

你需要:

microsoft.mshtml

shdocvw.dll

火狐c#:

using NDde.Client;


        DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
        dde.Connect();
        string url = dde.Request("URL", int.MaxValue);
        dde.Disconnect();
        MessageBox.Show(url);

下载 NDde.2.01.0563 (NDde.dll)

我也对 Chrome 做过:

VB.net:

共享功能:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
 ByVal lpClassName As String, _
 ByVal lpWindowName As String) As IntPtr
End Function

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
                  ByVal childAfter As IntPtr, _
                  ByVal lclassName As String, _
                  ByVal windowTitle As String) As IntPtr
End Function

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function


    Dim h As IntPtr
    For Each p As Process In Process.GetProcessesByName("chrome")
        h = FindWindow("Chrome_WidgetWin_1", p.MainWindowTitle)
        Exit For
    Next
    Dim urlH As IntPtr
    urlH = FindWindowEx(h, 0, "Chrome_OmniboxView", Nothing)
    Dim urlHH As IntPtr = Marshal.AllocHGlobal(100)
    Dim NumText As Integer = SendMessage(urlH, &HD, 50, urlHH)
    Dim url As String = Marshal.PtrToStringUni(urlHH)
    MsgBox(url)
于 2012-11-14T05:05:31.557 回答