我目前正在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;
答案 0 :(得分:1)
您发布的代码会创建一个新的IE(选项卡)实例,这不是您想要的。您想要连接到现有实例,为此您必须使用不同的方法。
首先创建一个IShellWindows实例。该对象是shell窗口注册表的接口(例如Windows资源管理器或IE)。
你可以做两件事:你可以订阅它的事件,并在用户打开和关闭窗口时收到通知;您还可以枚举当前窗口。
您使用IShellWindows
的{{3}}和get_Count()
方法枚举当前窗口。此枚举将为您提供IDispatch
接口,然后您可以QueryInterface()
到IWebBrowser2
接口(如果失败则跳过,而不是IE)。请注意,您可能仍然获得不是IE的窗口,因此可能需要更多过滤。
从这里你可以尝试找出它是否是你正在寻找的窗口。
答案 1 :(得分:0)
当前窗口位于所有shell窗口中z顺序的顶部,因此您可以枚举shell窗口并选择顶部窗口。请注意,shellwindows也会列出Windows资源管理器窗口,因此需要通过类名或可执行文件名来过滤掉这些窗口。
参考:
Automate the Active Windows Explorer or Internet Explorer Window