连接到运行IE实例C ++(Connect to running IE instance C++)

2019-08-07 19:52发布

我目前正在写在AutoIt的程序,但我想外包一些功能,C ++,因为它更安全。 我设法它来创建一个IE浏览器,然后导航到一个站点。

但那不是我所需要的。 我创建了IE中的AutoIt并++具有连接到这个IE和导航到特定网页用C语言编写的部分的一个实例。

现在它的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;

Answer 1:

您发布的代码创建一个新的IE(标签)的实例,这是不是你想要的。 你想连接到现有的实例,并为您必须使用不同的方法。

首先创建一个IShellWindows实例。 此目的是的外壳窗口(例如Windows资源管理器或IE)注册表的接口。

你可以做这个两件事情:您可以订阅的事件,并为用户打开和关闭的窗户被通知; 您还可以枚举当前窗口。

您列举使用当前的Windows get_Count()Item()方法IShellWindows 。 此枚举会给你IDispatch接口,你可以接着QueryInterface()IWebBrowser2接口(跳过如果失败了,不是IE)。 请注意,您仍然可能会得到不IE,可能需要让更多的滤波窗口。

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



Answer 2:

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

参考:

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



文章来源: Connect to running IE instance C++