2012-11-09 130 views
3

我工作的一个项目,我需要得到所有打开的标签的网址,在浏览器(如谷歌Chrome,IE,火狐,...)获取打开标签页的网址,浏览器

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

p.s.它是一个Windows窗体应用程序

+0

这将是非常困难的事情。如果你解释为什么你想要这样做,以防有更好的方式做,它可能会有所帮助。 – PhonicUK

+2

如果我创建了一个,我不会让我的浏览器共享该信息。对我来说看起来并不安全... – kratenko

+0

它特定于浏览器和可疑的可靠性; http://stackoverflow.com/questions/7814027/how-can-i-get-urls-of-open-pages-from-chrome-and-firefox注意与代理服务器方法有关的评论。 –

回答

5

即:

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) 
相关问题