如何使用C#连接到Internet Explorer的打开窗口?

4

您能在C#程序中使用COM / OLE连接到正在运行的Internet Explorer实例吗?

理想情况下,我希望找到IE中所有打开网页的URL。


1
一个WebBrowser控件在这种情况下不起作用,因为我不想让程序负责显示网页,只是想找出在IE的打开实例中正在显示什么。 - Evan
2个回答

4

我在这里找到了答案,以下是代码摘录:

public class Form1 : System.Windows.Forms.Form
{
    static private SHDocVw.ShellWindows shellWindows = new
    SHDocVw.ShellWindowsClass();

    public Form1()
    {
       InitializeComponent();    
       foreach(SHDocVw.InternetExplorer ie in shellWindows)
       {
           MessageBox.Show("ie.Location:" + ie.LocationURL);
           ie.BeforeNavigate2 += new
           SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(this.ie_BeforeNavigate2);
       }
}

 public void ie_BeforeNavigate2(object pDisp , ref object url, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
 {
  MessageBox.Show("event received!");
 } 
}

有人知道那个网页上的代码是否也适用于IE 6吗?我在7上测试过了。谢谢!


ShellWindows 可能无法在 Vista+ 上的低权限 IE 窗口中正常工作。 - i_am_jorf
我遇到了“Interop type cannot be embedded. Use the applicable interface instead”错误,所以我将第一行从“new SHDocVw.ShellWindowsClass()”更改为“new SHDocVw.ShellWindows()”,然后就能够循环浏览器的打开实例了。 - James Toomey

2

这个示例可以找到所有正在运行的IE实例(句柄),但是没有展示如何使用这些句柄以启用COM或OLE自动化,从而可以查找打开的URL。有什么想法吗? - Evan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接