0

我正在编写一个小型应用程序,它将启动 Internet Explorer 并将打开一个未知列表或 URL,作为新窗口或现有窗口中的新选项卡(取决于该特定站点的设置)。正在启动的网站可以位于任何 Internet 区域。我可以使用 SHDocVw 方法打开新的 Windows 和选项卡。

我试图找出一种方法来跟踪上次打开的 Internet Explorer 引用,以便我可以使用该引用打开选项卡。

我遇到的情况是,由于“松散耦合的 Internet Explorer”(LCIE)和 IE 保护模式,我启动的 IE 实例被关闭而另一个自动启动(IE 虚拟选项卡切换)。这导致我失去了对原始 IE 的引用,当我尝试打开选项卡时它失败了。

我想使用 ShellWindows FindWindowSW 方法来获取特定的窗口(基于 ShellWindows cookie 值),但我无法让它工作。有人能指出我正确的方向吗?

private InternetExplorer GetLastExplorer(int cookie)
{
  object _m = Type.Missing;
  const int SWC_BROWSER = 0x00000001;
  const int SWFO_COOKIEPASSED = 4;
  int pHWND;           

  _shellWindows.FindWindowSW(cookie, ref _m, SWC_BROWSER, out pHWND, 5);

  foreach (InternetExplorer window in _shellWindows)
  {
    if (window.HWND == pHWND)
    return window;
  }
 return null;
}
4

1 回答 1

0

我无法让它发挥作用,不得不采取不同的方法。我最终执行了以下操作来获取最后打开的 IE 实例:

private InternetExplorer _lastInternetExplorer;
private List<InternetExplorer> _existingInternetExplorers = new List<InternetExplorer>();
private static ShellWindows _shellWindows = new ShellWindows();
_shellWindows.WindowRegistered += OnShellWindowRegistered;

private void OnShellWindowRegistered(int lCookie)
{
  foreach (InternetExplorer window in _shellWindows)
  {
    if (!_existingInternetExplorers.Contains(window))
    {
      _lastInternetExplorer = window;
      _existingInternetExplorers.Add(window);
    }
  }        
}
于 2018-10-03T19:25:50.000 回答