Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到正在运行的IE实例C++; 我目前正在AutoIt编写程序,但我想把一些函数外包给C++,因为它更安全。我设法创建了一个IE并导航到一个站点_C++_Internet Explorer_Com - Fatal编程技术网

连接到正在运行的IE实例C++; 我目前正在AutoIt编写程序,但我想把一些函数外包给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

但那不是我需要的。我在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(选项卡)实例,这不是您想要的。您希望连接到现有实例,因此必须使用不同的方法

首先创建一个实例。此对象是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不客气。请帮自己一个忙,使用:)