http://community.csdn.net/Expert/topic/4380/4380276.xml?temp=.3637201
把代码复制过去,执行没有成功!
HRESULT hr;
hr=(*pfObjectFromLresult)(lRes,IID_IHTMLDocument,0,(void**)&spDoc);
没有成功呀
8 个解决方案
#1
UP
#2
up
#3
谢谢 UP
#4
是不是窗口句柄给的不对?代码贴上来看看?
#5
//枚举窗口
BOOL CALLBACK MyEnumWindowsProc(HWND hWnd,LPARAM lParam)
{
TCHAR buf[100];
CHAR cWindowTitle[256];
CHAR * ptr;
GetWindowText(hWnd,cWindowTitle,256);
ptr=strstr(cWindowTitle,"窗口标题XXXXX");
::GetClassName(hWnd,(LPTSTR)&buf,100);
if(_tcscmp(buf,_T("Internet Explorer_Server"))!=0&&ptr)
{
*(HWND*)lParam=hWnd;
return FALSE;
}
else
return TRUE;
}
//
HINSTANCE hInst=::LoadLibrary(_T("OLEACC.DLL"));
if(hInst!=NULL)
{
HWND hWndChild=NULL;
EnumWindows(MyEnumWindowsProc,(LPARAM)&hWndChild);
if(hWndChild)
{
CComPtr<IHTMLDocument2> spDoc=NULL;
LRESULT lRes=NULL;
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_IHTMLDocument,0,(void**)&spDoc);
if(SUCCEEDED(hr))
{
//没有走到这里....
//基本都是用你给的代码
BOOL CALLBACK MyEnumWindowsProc(HWND hWnd,LPARAM lParam)
{
TCHAR buf[100];
CHAR cWindowTitle[256];
CHAR * ptr;
GetWindowText(hWnd,cWindowTitle,256);
ptr=strstr(cWindowTitle,"窗口标题XXXXX");
::GetClassName(hWnd,(LPTSTR)&buf,100);
if(_tcscmp(buf,_T("Internet Explorer_Server"))!=0&&ptr)
{
*(HWND*)lParam=hWnd;
return FALSE;
}
else
return TRUE;
}
//
HINSTANCE hInst=::LoadLibrary(_T("OLEACC.DLL"));
if(hInst!=NULL)
{
HWND hWndChild=NULL;
EnumWindows(MyEnumWindowsProc,(LPARAM)&hWndChild);
if(hWndChild)
{
CComPtr<IHTMLDocument2> spDoc=NULL;
LRESULT lRes=NULL;
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_IHTMLDocument,0,(void**)&spDoc);
if(SUCCEEDED(hr))
{
//没有走到这里....
//基本都是用你给的代码
#6
是的,我知道了,是窗口句柄的问题。
但是我改正了窗口句柄后
我用普通的网页做了测试,可是读出内容了。
但是对与我说的那个聊天室却不行呀。
什么也没有读出来,是空的。
但是我改正了窗口句柄后
我用普通的网页做了测试,可是读出内容了。
但是对与我说的那个聊天室却不行呀。
什么也没有读出来,是空的。
#7
聊天室可能有内嵌的IFrame
IHTMLDocument2* pDoc2;
CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == "FRAME" || str == "IFRAME")
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);
然后再用pDoc2进行上面的调用
IHTMLDocument2* pDoc2;
CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == "FRAME" || str == "IFRAME")
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);
然后再用pDoc2进行上面的调用
#8
不管,先给分
#1
UP
#2
up
#3
谢谢 UP
#4
是不是窗口句柄给的不对?代码贴上来看看?
#5
//枚举窗口
BOOL CALLBACK MyEnumWindowsProc(HWND hWnd,LPARAM lParam)
{
TCHAR buf[100];
CHAR cWindowTitle[256];
CHAR * ptr;
GetWindowText(hWnd,cWindowTitle,256);
ptr=strstr(cWindowTitle,"窗口标题XXXXX");
::GetClassName(hWnd,(LPTSTR)&buf,100);
if(_tcscmp(buf,_T("Internet Explorer_Server"))!=0&&ptr)
{
*(HWND*)lParam=hWnd;
return FALSE;
}
else
return TRUE;
}
//
HINSTANCE hInst=::LoadLibrary(_T("OLEACC.DLL"));
if(hInst!=NULL)
{
HWND hWndChild=NULL;
EnumWindows(MyEnumWindowsProc,(LPARAM)&hWndChild);
if(hWndChild)
{
CComPtr<IHTMLDocument2> spDoc=NULL;
LRESULT lRes=NULL;
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_IHTMLDocument,0,(void**)&spDoc);
if(SUCCEEDED(hr))
{
//没有走到这里....
//基本都是用你给的代码
BOOL CALLBACK MyEnumWindowsProc(HWND hWnd,LPARAM lParam)
{
TCHAR buf[100];
CHAR cWindowTitle[256];
CHAR * ptr;
GetWindowText(hWnd,cWindowTitle,256);
ptr=strstr(cWindowTitle,"窗口标题XXXXX");
::GetClassName(hWnd,(LPTSTR)&buf,100);
if(_tcscmp(buf,_T("Internet Explorer_Server"))!=0&&ptr)
{
*(HWND*)lParam=hWnd;
return FALSE;
}
else
return TRUE;
}
//
HINSTANCE hInst=::LoadLibrary(_T("OLEACC.DLL"));
if(hInst!=NULL)
{
HWND hWndChild=NULL;
EnumWindows(MyEnumWindowsProc,(LPARAM)&hWndChild);
if(hWndChild)
{
CComPtr<IHTMLDocument2> spDoc=NULL;
LRESULT lRes=NULL;
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_IHTMLDocument,0,(void**)&spDoc);
if(SUCCEEDED(hr))
{
//没有走到这里....
//基本都是用你给的代码
#6
是的,我知道了,是窗口句柄的问题。
但是我改正了窗口句柄后
我用普通的网页做了测试,可是读出内容了。
但是对与我说的那个聊天室却不行呀。
什么也没有读出来,是空的。
但是我改正了窗口句柄后
我用普通的网页做了测试,可是读出内容了。
但是对与我说的那个聊天室却不行呀。
什么也没有读出来,是空的。
#7
聊天室可能有内嵌的IFrame
IHTMLDocument2* pDoc2;
CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == "FRAME" || str == "IFRAME")
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);
然后再用pDoc2进行上面的调用
IHTMLDocument2* pDoc2;
CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == "FRAME" || str == "IFRAME")
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);
然后再用pDoc2进行上面的调用
#8
不管,先给分