如何获得IWebBrowser2的实例

How to get an Instance of IWebBrowser2

本文关键字:实例 IWebBrowser2 何获得      更新时间:2023-10-16

我对c++有点陌生,请温柔点。

我正在尝试自动化Internet Explorer。我有一个简单的Win32控制台应用程序,我试图使用本地服务器创建IE实例。

然而,我对CoCreateInstance()的调用没有返回一个对象来初始化我的IWebBrowser2变量。

我需要一些帮助,看看我错过了什么。

下面是我的代码:
HRESULT InstanciateIEResult;
HRESULT NavigateResult;
HRESULT ShowBrowserResult;
VARIANT * empty = new VARIANT();
BSTR URL = L"bing.com";
IWebBrowser2*    pBrowser2;
InstanciateIEResult = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
    IID_IWebBrowser2, (void**)&pBrowser2);

if(pBrowser2)
{
    //never reach here
    NavigateResult = pBrowser2->Navigate(URL, empty, empty, empty, empty);
    ShowBrowserResult = pBrowser2->put_Visible(VARIANT_TRUE);
} 

我也不知道如何解码什么HRESULT返回。如果你知道的话,那也会很有帮助。

我正在看IWebBrowser2接口和CoCreateInstance的文档。

在使用COM对象之前需要调用CoInitialize()

另外,您需要使用SysAllocString()来分配字符串。

的例子:

#include <windows.h>
#include <MsHTML.h>
#include <Exdisp.h>
#include <ExDispid.h>
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    CoInitialize(NULL);
    HRESULT InstanciateIEResult;
    HRESULT NavigateResult;
    HRESULT ShowBrowserResult;
    VARIANT empty;
    VariantInit(&empty);
    IWebBrowser2* browser = NULL;
    HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL,
            CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&browser);
    if (browser)
    {
        BSTR URL = SysAllocString(L"bing.com");
        NavigateResult = browser->Navigate(URL, &empty, &empty, &empty, &empty);
        SysFreeString(URL);
        ShowBrowserResult = browser->put_Visible(VARIANT_TRUE);
        browser->Release();
    }
    CoUninitialize();
    return 0;
}