连接到正在运行的IE实例C++; 我目前正在AutoIt编写程序,但我想把一些函数外包给C++,因为它更安全。我设法创建了一个IE并导航到一个站点
但那不是我需要的。我在AutoIt创建IE实例,而C++编写的部分必须连接到IE并导航到特定的页面。连接到正在运行的IE实例C++; 我目前正在AutoIt编写程序,但我想把一些函数外包给C++,因为它更安全。我设法创建了一个IE并导航到一个站点,c++,internet-explorer,com,C++,Internet Explorer,Com,但那不是我需要的。我在AutoIt创建IE实例,而C++编写的部分必须连接到IE并导航到特定的页面。 现在是一个C++应用程序,但后来,当一切运行良好,我将创建一个.dll,并调用它与AutoIT。所以我可以传递诸如hWnd之类的值 我想做这件事有很好的理由,所以请不要问我为什么要这样做 有人知道我怎么办吗?提前谢谢 CoInitialize(NULL); IWebBrowser2* pBrowser = NULL; HRESULT hr = CoCreateInstance(CLSID
现在是一个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(选项卡)实例,这不是您想要的。您希望连接到现有实例,因此必须使用不同的方法 首先创建一个实例。此对象是shell窗口(例如windows资源管理器或IE)注册表的接口 您可以用它做两件事:您可以订阅它的事件,并在用户打开和关闭窗口时收到通知;您还可以枚举当前窗口 您可以使用
IShellWindows
的和方法枚举当前窗口。此枚举将为您提供IDispatch
接口,然后您可以QueryInterface()
到IWebBrowser2
接口(如果失败则跳过,而不是IE)。请注意,您可能仍然会得到非IE的窗口,因此可能需要进行更多筛选
从这里,您可以尝试找出是否是您要查找的窗口。您发布的代码创建了一个新的IE(选项卡)实例,这不是您想要的。您希望连接到现有实例,因此必须使用不同的方法 首先创建一个实例。此对象是shell窗口(例如windows资源管理器或IE)注册表的接口 您可以用它做两件事:您可以订阅它的事件,并在用户打开和关闭窗口时收到通知;您还可以枚举当前窗口 您可以使用
IShellWindows
的和方法枚举当前窗口。此枚举将为您提供IDispatch
接口,然后您可以QueryInterface()
到IWebBrowser2
接口(如果失败则跳过,而不是IE)。请注意,您可能仍然会得到非IE的窗口,因此可能需要进行更多筛选
从这里,您可以尝试确定它是否是您要查找的窗口。在所有shell窗口中,当前窗口位于z顺序的顶部,因此您可以枚举shell窗口并选择顶部窗口。注意shellwindows也列出了Windows资源管理器窗口,因此需要通过类名或可执行文件名过滤掉这些窗口 参考:
在所有shell窗口中,当前窗口位于z顺序的顶部,因此您可以枚举shell窗口并选择顶部窗口。注意shellwindows也列出了Windows资源管理器窗口,因此需要通过类名或可执行文件名过滤掉这些窗口 参考:
那么您需要什么?创建一个附加组件?一个如何导航现有IE实例而不是创建一个实例的想法。那么你需要什么呢?创建附加组件?了解如何导航现有IE实例而不是创建一个。感谢您的帮助。如果我可以将IE实例的所有信息传递给DLL呢?请看一看,也许有一些东西非常适合。@user1传递HWND最有用,因为每个IE选项卡都有自己的HWND,您可以从
IWebBrowser2
界面获得它。您仍然需要执行上述所有操作,因为您需要IWebBrowser2
界面来执行导航,并且您不能将其传递到另一个进程。谢谢:),这将花费我很长时间来编程。我今天刚开始用C++编程:D@user1不客气。请帮自己一个忙,使用:)谢谢你的帮助。如果我可以将IE实例的所有信息传递给DLL呢?请看一看,也许有一些东西非常适合。@user1传递HWND最有用,因为每个IE选项卡都有自己的HWND,您可以从IWebBrowser2
界面获得它。您仍然需要执行上述所有操作,因为您需要IWebBrowser2
界面来执行导航,并且您不能将其传递到另一个进程。谢谢:),这将花费我很长时间来编程。我今天刚开始用C++编程:D@user1不客气。请帮自己一个忙,使用:)