如果知道“Internet Explorer_Server”窗口去获取IWebbrowser2接口

msg = RegisterWindowMessage(WM_HTML_GETOBJECT);

 

LRESULT WHandle


SendMessageTimeOut(WHandle, msg , 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);

 

ObjectFromLresult( lRes , IHTMLDocument2, 0, pDoc);

 

再从IHTMLDocument2的PDoc获取IWebbrowser2接口

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。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值