通过窗口句柄获取IHTMLDocument2的文档的接口指针 已获得浏览器的窗口句柄。怎样获取IHTMLDocument2的文档的接口指针? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上现成的代码/*函数名:GetDocInterface 参数:hWnd,WebBrowser控件的窗口句柄 功能:通过WM_HTML_GETOBJECT取得控件的IHTMLDocument2接口*/IHTMLDocument2* GetDocInterface(HWND hWnd,char * url) { // 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); IHTMLDocument2* pDoc2=NULL; if ( hInst != NULL ) { if ( hWnd != NULL ) { CComPtr<IHTMLDocument> spDoc=NULL; LRESULT lRes; UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") ); ::SendMessageTimeout( hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes ); LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") ); if ( pfObjectFromLresult != NULL ) { HRESULT hr; hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc); if ( SUCCEEDED(hr) ) { CComPtr<IDispatch> spDisp; CComQIPtr<IHTMLWindow2> spWin; spDoc->get_Script( &spDisp ); spWin = spDisp; spWin->get_document( &pDoc2 ); if(url) { BSTR bstrTxt1; pDoc2->get_URL(&bstrTxt1); CString cstr(bstrTxt1); strcpy(url,cstr); } } } } ::FreeLibrary(hInst); } else {//如果没有安装MSAA AfxMessageBox(_T("请您安装Microsoft Active Accessibility(OLEACC.DLL)")); } return pDoc2;} http://blog.vckbase.com/TeacherYang/archive/2005/04/20/4830.aspx这是另一个方法。 不行呀。。获取的指针为空值。。下面是我的代码CoInitialize( NULL ); long l = 1179966;//窗口句柄 HWND hhhh = (HWND)l; ::ShowWindow(hhhh,SW_SHOWNORMAL); //激活找到的前一个程序 ::SetForegroundWindow(hhhh); HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); IHTMLDocument2* pDoc2=NULL; if ( hInst != NULL ) { if ( hhhh != NULL ) { CComPtr<IHTMLDocument> spDoc=NULL; LRESULT lRes; UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") ); ::SendMessageTimeout( hhhh, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes ); LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") ); if ( pfObjectFromLresult != NULL ) { HRESULT hr; hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc); if ( SUCCEEDED(hr) ) { CComPtr<IDispatch> spDisp; CComQIPtr<IHTMLWindow2> spWin; spDoc->get_Script( &spDisp ); spWin = spDisp; spWin->get_document( &pDoc2 ); } } } else { MessageBox("句柄为空!"); } ::FreeLibrary(hInst); } else {//如果没有安装MSAA AfxMessageBox(_T("请您安装Microsoft Active Accessibility(OLEACC.DLL)")); } if (pDoc2 == NULL) MessageBox("获取的文档指针为空"); else pDoc2->put_bgColor(CComVariant("green")); CoUninitialize(); 好像不行 spWin = spDisp;接口转换用这个用 spDisp->QueryInterface(spWin); VC6:CComPtr< IShellWindows > spShellWin;spShellWin.CoCreateInstance( CLSID_ShellWindows );CComPtr< IDispatch > spDispIE;spShellWin->Item(CComVariant( (long)0 ), &spDispIE );CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;CComPtr < IDispatch > spDispDoc;spBrowser->get_Document( &spDispDoc );CComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc;这样就可以获得了 spDocument2 程序和Windows防火墙问题,菜鸟求方法 如何在MFC分裂画框 mfc画图显示不过来,大家帮忙... 怎么搞定有两个;号的语句编译问题? 如何制作一个类似windows CD安装的界面(只要第一个页面) typedef 的一个疑问 寻求屏幕取字源代码 关于字符转化的问题 求正则表达式 打开文件对话框如何直接打开根目录 VC中,如何获取Flash(swf)最后一帧的图片? 请大虾讲一下SelectClipRgn和SetWindowRgn的区别
参数:hWnd,WebBrowser控件的窗口句柄
功能:通过WM_HTML_GETOBJECT取得控件的IHTMLDocument2接口
*/
IHTMLDocument2* GetDocInterface(HWND hWnd,char * url)
{
// 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
IHTMLDocument2* pDoc2=NULL;
if ( hInst != NULL )
{
if ( hWnd != NULL )
{
CComPtr<IHTMLDocument> spDoc=NULL;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc);
if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &pDoc2 );
if(url)
{
BSTR bstrTxt1;
pDoc2->get_URL(&bstrTxt1);
CString cstr(bstrTxt1);
strcpy(url,cstr);
}
}
}
}
::FreeLibrary(hInst);
}
else
{//如果没有安装MSAA
AfxMessageBox(_T("请您安装Microsoft Active Accessibility(OLEACC.DLL)"));
}
return pDoc2;
}
long l = 1179966;//窗口句柄
HWND hhhh = (HWND)l;
::ShowWindow(hhhh,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(hhhh);
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
IHTMLDocument2* pDoc2=NULL;
if ( hInst != NULL )
{
if ( hhhh != NULL )
{
CComPtr<IHTMLDocument> spDoc=NULL;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hhhh, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc);
if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &pDoc2 );
}
}
}
else
{
MessageBox("句柄为空!");
}
::FreeLibrary(hInst);
}
else
{//如果没有安装MSAA
AfxMessageBox(_T("请您安装Microsoft Active Accessibility(OLEACC.DLL)"));
} if (pDoc2 == NULL)
MessageBox("获取的文档指针为空");
else
pDoc2->put_bgColor(CComVariant("green"));
CoUninitialize();
接口转换用这个
用 spDisp->QueryInterface(spWin);
spShellWin.CoCreateInstance( CLSID_ShellWindows );CComPtr< IDispatch > spDispIE;
spShellWin->Item(CComVariant( (long)0 ), &spDispIE );CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;
CComPtr < IDispatch > spDispDoc;spBrowser->get_Document( &spDispDoc );
CComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc;这样就可以获得了 spDocument2