goodboyws(深夜不眠者),HELP!!!!!

时间:2023-01-15 14:33:36
这是我的问题
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))
          {
               //没有走到这里....
               //基本都是用你给的代码 

#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进行上面的调用

#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))
          {
               //没有走到这里....
               //基本都是用你给的代码 

#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进行上面的调用

#8


不管,先给分