internet explorer语言 - 连接到正在运行的IE实例c++

internet explorer - Connect to running IE instance C++

本文关键字:运行 IE 实例 c++ 语言 explorer 连接 internet      更新时间:2023-10-16

我目前正在AutoIt中编写程序,但我想将一些功能外包给c++,因为它更安全。我设法创建了一个IE浏览器并导航到一个网站。

但那不是我需要的。我在AutoIt中创建了一个IE实例,用c++编写的部分必须连接到这个IE并导航到特定的页面。

现在它是一个c++应用程序,但稍后,当一切正常运行时,我将创建一个。dll并使用AutoIt调用它。我可以传递hWnd之类的值

我想这样做是有原因的,所以请不要问我为什么这样做。

有谁知道我该怎么做吗?提前谢谢。

    CoInitialize(NULL);
IWebBrowser2* pBrowser = NULL;
HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL, 
    CLSCTX_SERVER, IID_IWebBrowser2, (LPVOID*)&pBrowser);
if (SUCCEEDED(hr) && (pBrowser != NULL))
{
    VARIANT vEmpty;
    VariantInit(&vEmpty);
    VARIANT vFlags;
    V_VT(&vFlags) = VT_I4;
    V_I4(&vFlags) = navOpenInNewWindow;
    BSTR bstrURL = SysAllocString(L"http://www.ard.de");
    pBrowser->Navigate(bstrURL, &vFlags, &vEmpty, &vEmpty, &vEmpty);
    pBrowser->Quit();
    SysFreeString(bstrURL);
}
if (pBrowser)
    pBrowser->Release();
CoUninitialize();
return 0;

您发布的代码创建了一个新的IE(选项卡)实例,这不是您想要的。如果你想连接到一个现有的实例,那么你必须使用不同的方法。

首先创建一个IShellWindows实例。该对象是shell窗口(如windows资源管理器或IE)的注册表接口。

你可以用它做两件事:你可以订阅它的事件,并在用户打开和关闭窗口时收到通知;您还可以枚举当前窗口。

使用IShellWindowsget_Count()Item()方法枚举当前窗口。该枚举将为您提供IDispatch接口,然后您可以使用QueryInterface()IWebBrowser2接口(如果失败则跳过,而不是IE)。请注意,您可能仍然会得到非IE的窗口,因此可能需要更多的过滤。

从这里你可以试着找出是否是你正在寻找的窗口

当前窗口位于所有shell窗口z顺序的顶部,因此您可以枚举shell窗口并选择最上面的一个。请注意,shellwindows也列出了Windows资源管理器窗口,因此需要通过类名或可执行文件名过滤掉这些窗口。

参考:

自动激活Windows资源管理器或Internet Explorer窗口