C# - 获取Internet Explorer选项卡的索引

时间:2017-03-22 17:07:49

标签: c# internet-explorer tabs

我正在谷歌搜索并试图解决这个问题一整天,所以我认为现在是时候问。

在我的C#代码中,我试图以与浏览器中显示的顺序相同的顺序获取IE标签的数量。

重要说明:我无法使用网址或标题来执行此操作,因为浏览器可以包含两个打开相同页面的标签页。

为此我尝试了不同的方法:

  • 我使用了Interop.SHDocVw库,我试图获取所有IE 窗口并获得他们的标签hwnd。这种方法工作正常,但是 选项卡按创建日期排序。所以如果我在IE中打开4个标签吧 返回正确的顺序,但当我将一个标签移动到第一个 在这种方法中,它仍然显示为第4位。

       List<int> hwnds = new List<int>();
       ShellWindows shellWindows = new ShellWindows();
       var explorer = shellWindows.Cast<InternetExplorer>()
                       .ToList()
                       .Where(item => item.Document is IHTMLDocument2);
    
       foreach (var internetExplorer in explorer) {
            hwnds.Add((internetExplorer.Document as IOleWindow).GetWindow());
       }
    
       return windows;
    
  • 其他方式是实现Win32窗口搜索,我在哪里 通过它的类名过滤窗口。这会返回顺序 在Spy ++软件中。从我看来它看起来像是按顺序排序 相互作用。第一个是与我最后交互的标签, 第二个 - 前一个等等。
  • 我尝试的另一件事是实现IEAccessible获取方式 标签,但这对我来说根本不起作用。 https://social.msdn.microsoft.com/Forums/ie/en-US/03a8c835-e9e4-405b-8345-6c3d36bc8941/ie7-ie8-tab-interaction-accessibility-class?forum=ieextensiondevelopment

  • 我尝试的最后一件事是使用UI自动化,但使用WinSDK 检查工具我可以看到只有当前打开的选项卡的hwnd 可见。否则,我只能看到没有hwnds的标题按钮。

如果有人可以帮我解决这个问题,我会非常感激 - 因为我看不到任何其他解决方案。

1 个答案:

答案 0 :(得分:0)

您应该能够通过UI自动化以正确的顺序获得标签。运行Inspect.exe工具我能够在很多窗格控件下正确看到它们: List of opened tabs in IE