gpt4 book ai didi

c++ - 连接到正在运行的 IE 实例 C++

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:09 25 4
gpt4 key购买 nike

我目前正在用 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实例。该对象是外壳窗口注册表(例如 Windows 资源管理器或 IE)的接口(interface)。

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

您使用 get_Count() 枚举当前窗口和 Item() IShellWindows 的方法。此枚举将为您提供 IDispatch 接口(interface),然后您可以将其 QueryInterface() 转换为 IWebBrowser2 接口(interface)(如果失败则跳过,IE 除外)。请注意,您可能仍会获得非 IE 的窗口,因此可能需要更多过滤。

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

关于c++ - 连接到正在运行的 IE 实例 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com