我想获取IE窗口滚动条的当前位置,我已经根据窗口句柄获取到了IHTMLDocument2的对象指针。并且根据IHTMLDocument2的指针获取到了BODY对象,HRESULT IHTMLDocument2::get_body(IHTMLElement **p);是这样做吗?然后接下来要怎么做?
在线等。快帮忙解决下吧,谢谢了!
在线等。快帮忙解决下吧,谢谢了!
解决方案 »
- 实在不好意思,又来提问了。
- 如何设置动态创建的文本框的背景色
- MFC ActiveX 控件开发问题
- 我在程序中用regsvr32 命令注册控件时会弹出一个注册成功的对话框!如何解决!
- _bstr_t与BSTR的矛盾?
- 哪儿有中文rfc1945(http 1.0) 2616(http1.1)?
- 很简单的问题,如何获得,控件的颜色(如:按钮的颜色),敬请详细解答
- 发送什么消息能让ComboBoxEx中的指定项显示在ComboBoxEx上面的框中?
- 半个月没有解决的问题 诚征高手
- 请问:哪里可以找到最新的platform sdk?谢谢!
- 上当了?用了下vs2008发现没什么高明之处呀?
- SetItemState的问题(急急急)
BOOL CALLBACK CBookToolDlg::EnumChildProc( HWND hwnd,LPARAM lParam )
{
char szClassName[512] = {0};
GetClassName(hwnd,szClassName,512);
OutputDebugString(szClassName);
IEINFO io;
CoInitialize( NULL );
if (strcmp(szClassName,"Internet Explorer_Server") == 0)
{
io.IEHwnd=hwnd;
CComPtr<IHTMLDocument2> spDoc;
LRESULT lRes;
IHTMLElement* pElembody;
long pos;
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hwnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
if ( SUCCEEDED(hr) )
{
spDoc->get_body(&pElembody);
((IHTMLTextContainer*)pElembody)->get_scrollTop(&pos);
io.pos=pos;
m_IEInfo.push_back(io);
}
}
::FreeLibrary( hInst );
memset(szClassName,'\0',sizeof(szClassName));
}
CoUninitialize();
return TRUE;
}
在这段代码中运行到spDoc->get_body(&pElembody);时,报内存错误,这是怎么回事啊?
哪位高手帮帮忙啊
if( spDoc )
spDoc值可能为NULL
我想获取IE窗口滚动条的当前位置,我已经根据窗口句柄获取到了IHTMLDocument2的对象指针。并且根据IHTMLDocument2的指针获取到了BODY对象,HRESULT IHTMLDocument2::get_body(IHTMLElement **p);是这样做吗?然后接下来要怎么做?
IHTMLWindow2 *pWindow;
pDocument->get_parentWindow (&pWindow);
使用IHTMLWindow来取
IHTMLWindow2 *pWindow;
pDocument->get_parentWindow (&pWindow);
使用IHTMLWindow来取
这个里面m_browser是什么啊?能否说的明白点?
body->QueryInterface(IID_IHTMLElement2, &body2);
long left;
body2->get_scrollLeft(&left);
scrollPos.top=0;
scrollPos.left=0;
try
{
//ASSERT(m_pBrowserApp != NULL);
if(m_pBrowserApp!=NULL)
{
IDispatch *pDisp=NULL;
pDisp = GetHtmlDocument();
//ASSERT(pDisp);
if(pDisp!=NULL)
{
HRESULT hr;
IHTMLDocument2 *pDocument = NULL;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument );
//ASSERT(SUCCEEDED(hr));
//ASSERT(pDocument);
if(SUCCEEDED(hr) && pDocument!=NULL)
{
IHTMLElement *pBody = NULL;
hr = pDocument->get_body(&pBody);
//ASSERT(SUCCEEDED(hr));
//ASSERT(pBody);
if(SUCCEEDED(hr) && pBody!=NULL)
{
IHTMLElement2 *pElement = NULL;
hr = pBody->QueryInterface(IID_IHTMLElement2,(void**)&pElement);
//ASSERT(SUCCEEDED(hr));
//ASSERT(pElement);
if(SUCCEEDED(hr) && pElement!=NULL)
{
pElement->get_scrollTop(&scrollPos.top);
pElement->get_scrollLeft(&scrollPos.left);
}
}
}
pDisp->Release();
}
}
}catch(...)
{}
return scrollPos;
if (!pCont)
{
return;
}
pCont->get_scrollTop(&pos);
这样是可以获取到pos了,但是某些网站,这样是不行。
[color=#FF0000]解决办法是只需把document.body用document.documentElement替换即可。 这句话是什么意思啊?在VC中要怎么实现这句话?[/color]
哪位大哥来帮忙看下啊,不胜感激!!!!