本博文的内容基本取自“微软帮助和支持”上的一篇文章:《How to get IHTMLDocument2 from HWND》,但是里面的代码有个小错误会使获得的IHTMLDocument2无法使用,可能是版本问题,这里先提出修改方法:把代码中的IID_IHTMLDocument改为IID_IHTMLDocument2。
注意:该方法只对采用IE内核(Trident)的浏览器有效,包括360安全浏览器、腾讯TT、世界之窗、绿色浏览器等。
下面先给出示例代码,对《How to get IHTMLDocument2 from HWND》中的代码除了前面提到的修改,就不再做其他改动了。
注意:该方法只对采用IE内核(Trident)的浏览器有效,包括360安全浏览器、腾讯TT、世界之窗、绿色浏览器等。
下面先给出示例代码,对《How to get IHTMLDocument2 from HWND》中的代码除了前面提到的修改,就不再做其他改动了。
#include代码中对MSAA的显式加载是用于早期Windows版本,Windows 2000 以后的操作系统都包含了MSAA,无需动态加载,直接使用ObjectFromLresult#include #include BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) { TCHAR buf[100]; ::GetClassName( hwnd, (LPTSTR)&buf, 100 ); if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 ) { *(HWND*)lParam = hwnd; return FALSE; } else return TRUE; }; // 你可以将接口指针保存到一个成员变量中以便访问 void CDlg::OnGetDocInterface(HWND hWnd) { CoInitialize( NULL ); // 显式加载MSAA,这样我们就可以知道它是否已经被安装 HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); if ( hInst != NULL ) { if ( hWnd != NULL ) { HWND hWndChild=NULL; // 获取第一个文档的窗口句柄 ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild ); if ( hWndChild ) { CComPtr spDoc; LRESULT lRes; UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") ); ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes ); LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") ); if ( pfObjectFromLresult != NULL ) { HRESULT hr; hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument2, 0, (void**)&spDoc ); if ( SUCCEEDED(hr) ) { // 将网页背景色改为红色 spDoc->put_bgColor( CComVariant("red") ); } } } // else 文档未就绪 } // else IE未运行 ::FreeLibrary( hInst ); } // else MSAA未安装 CoUninitialize(); }
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10841852
每日一句
Hard work magnifies achievement’s joy.
越努力,成就感越强。
越努力,成就感越强。
解决安卓运行错误Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug
Notepad++如何代码格式化——NppAStyle
MySQL 数据库优化
微信小程序自定义组件的使用以及调用自定义组件中的方法
Android最简单方式实现DatePickerDialog只显示年、月、日
2020机器学习的5大编程语言
阿里云再次搬迁笔记
UAC的限制引起WM_DROPFILES无法响应的解决办法
【教程】win10 彻底卸载edge浏览器
MeasureSpec中三种模式:UNSPECIFIED,AT_MOST,EXACTLY
android ndk开发之asm/page.h: not found
Android Studio Arctic Fox | 2020.3.1使用问题
Android Studio开发之app:transformJackWithJackForDebug错误
新会员