iwebbrowser2 c 读取返回html,IWebBrowser2的方法
时间: 2024-06-08 08:05:22 浏览: 9
IWebBrowser2 是一个 COM 接口,可以通过它来访问和控制 Internet Explorer (IE) 浏览器。下面是读取返回 HTML 的示例代码:
```c
#include <windows.h>
#include <exdisp.h>
#include <mshtml.h>
// 定义 IWebBrowser2 接口指针
IWebBrowser2 *pWebBrowser = NULL;
// 定义事件 ID 和事件处理函数
const DISPID DOWNLOAD_COMPLETE = 104;
void STDMETHODCALLTYPE OnDownloadComplete(IDispatch *pDisp, VARIANT *pvararg,
unsigned int cvararg, unsigned int *rgdispid)
{
// 获取文档接口指针
IDispatch *pHtmlDoc = NULL;
pWebBrowser->get_Document(&pHtmlDoc);
// 将文档接口指针转换为 HTML 文档接口指针
IHTMLDocument2 *pHtmlDoc2 = NULL;
HRESULT hr = pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc2);
if (SUCCEEDED(hr))
{
// 获取 HTML 源码
BSTR bstrHtml;
pHtmlDoc2->get_body()->get_outerHTML(&bstrHtml);
// 输出 HTML 源码
wprintf(L"%s\n", bstrHtml);
// 释放字符串内存
SysFreeString(bstrHtml);
// 释放 HTML 文档接口指针
pHtmlDoc2->Release();
}
// 释放文档接口指针
pHtmlDoc->Release();
}
// 主函数
int main()
{
// 初始化 COM
CoInitialize(NULL);
// 创建 IE 实例
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pWebBrowser);
// 显示 IE 窗口
pWebBrowser->put_Visible(VARIANT_TRUE);
// 注册下载完成事件
IConnectionPointContainer *pCPC = NULL;
pWebBrowser->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (pCPC)
{
IConnectionPoint *pCP = NULL;
pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &pCP);
if (pCP)
{
DWORD dwCookie = 0;
pCP->Advise((IDispatch*)pWebBrowser, &dwCookie);
pCP->Release();
}
pCPC->Release();
}
// 载入 URL
VARIANT vEmpty;
VariantInit(&vEmpty);
pWebBrowser->Navigate(L"https://www.baidu.com/", &vEmpty, &vEmpty, &vEmpty, &vEmpty);
// 等待下载完成事件
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 取消注册下载完成事件
pCPC = NULL;
pWebBrowser->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (pCPC)
{
IConnectionPoint *pCP = NULL;
pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &pCP);
if (pCP)
{
DWORD dwCookie = 0;
pCP->Unadvise(dwCookie);
pCP->Release();
}
pCPC->Release();
}
// 释放 IE 实例
pWebBrowser->Quit();
pWebBrowser->Release();
// 反初始化 COM
CoUninitialize();
return 0;
}
```
这段代码会打开一个 IE 窗口,访问百度首页,并在下载完成后输出 HTML 源码。其中,OnDownloadComplete() 函数是下载完成事件处理函数,用于获取文档接口指针并输出 HTML 源码。主函数中使用 Navigate() 方法载入 URL,然后等待下载完成事件,最后使用 Quit() 方法退出 IE。