我正在谷歌搜索并试图解决这个问题一整天,所以我认为现在是时候问。
在我的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;
我尝试的另一件事是实现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的标题按钮。
如果有人可以帮我解决这个问题,我会非常感激 - 因为我看不到任何其他解决方案。