如何使用每个选项卡的PID获取Internet Explorer选项卡的URL?

时间:2011-12-09 12:51:13

标签: c# internet-explorer

我的应用程序触发了具有特定URL的Web浏览器。 我的程序结束后,我想关闭我打开的网页/标签..

通过调用带参数a的EXE文件。流程名称b。 URL中的字符串

详细问题 How to kill firefox child process/tab from Java/C++

我使用C#方法......

我可以找到所有标签的进程ID ..

foreach (Process theprocess in processlist) {
    if (theprocess.ProcessName == "iexplore") {
        Console.WriteLine("Process: {0}\tID: {1}\tWindow name: {2}",
            theprocess.ProcessName, theprocess.Id, theprocess.MainWindowTitle
        );
    }
}

目前我只能获得进程的Window Title ....而在IE8中只有一个主要进程的窗口标题可见..

如果我有每个选项卡的pid,如何找到选项卡的URL ...并且仅杀死该选项卡?

我得到了这个帮助 Access is denied - when trying to get the url (text) from address bar's handle

使用SHDocVw; 。

foreach(新的ShellWindowsClass()中的InternetExplorer ieInst)    Console.WriteLine(ieInst.LocationURL);

2 个答案:

答案 0 :(得分:10)

在IE7及更高版本中,下面的代码只会删除其网址中包含匹配字符串的标签。

   foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows())
   {
        String url = ieInst.LocationURL;
        if (url.Contains("google"))
        {
            ieInst.Quit();
        }
   }

要关注特定标签,代码为:

   foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows())
   {
        String url = ieInst.LocationURL;
        if (url.Contains("google"))
        {
            int val = ieInst.HWND;
            IntPtr hwnd = new IntPtr(val);
            ShowWindow(hwnd, SW_MAXIMISE);
            SetForegroundWindow(hwnd);
        }
   }

答案 1 :(得分:3)

有一种方法可以获取每个IExplorer实例的URL !!

添加引用" Microsoft Internet Controls "到项目。

这段代码是

**foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindowsClass())
        {
            System.Console.WriteLine(ieInst.LocationURL);
        }**

生成exe和Interop.SHDocVw.dll

它会起作用...... :)