internet explorer语言 - 连接到正在运行的IE实例c++
internet explorer - Connect to running IE instance C++
我目前正在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)的注册表接口。
你可以用它做两件事:你可以订阅它的事件,并在用户打开和关闭窗口时收到通知;您还可以枚举当前窗口。
使用IShellWindows
的get_Count()
和Item()
方法枚举当前窗口。该枚举将为您提供IDispatch
接口,然后您可以使用QueryInterface()
到IWebBrowser2
接口(如果失败则跳过,而不是IE)。请注意,您可能仍然会得到非IE的窗口,因此可能需要更多的过滤。
从这里你可以试着找出是否是你正在寻找的窗口
当前窗口位于所有shell窗口z顺序的顶部,因此您可以枚举shell窗口并选择最上面的一个。请注意,shellwindows也列出了Windows资源管理器窗口,因此需要通过类名或可执行文件名过滤掉这些窗口。
参考:自动激活Windows资源管理器或Internet Explorer窗口
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 创建在新Windows桌面上运行IE的过程
- 如何在C++XE2中使用IWebBrowser2运行IE事件
- 在MFC应用程序的IE web浏览器控件中运行userscript
- internet explorer语言 - 连接到正在运行的IE实例c++