本人初学,对照着http://support.microsoft.com/default.aspx?scid=kb;en-us;249232(从ie窗口获得网页内容),但程序运行到这句 spDoc->get_Script( &spDisp ),总是出现Assert错误.不知何故。请大家帮助,谢谢。

解决方案 »

  1.   

    DHTML 对象模型的有效性
    DHTML 对象模型 用于访问和操作HTML页面的内容,并且在页面装载之前不可用。你的应用程序通过处理WebBrowser 控件的DWebBrowserEvents2::DocumentComplete事件来判断一个页面是否被装载了。 这个事件可能被页面中的每个框架触发,并且在顶层文档载入完成时再触发一次。你可以通过比较事件传递的IDispatch 接口指针和WebBrowser 控件来判断DWebBrowserEvents2::DocumentComplete 事件是否是顶层框架的。
      

  2.   

    蒋晟兄,我比较菜,看不太懂 :(我是通过FindWindow找到的ie窗口,并且在枚举其子窗口和调用ObjectFromLresult函数时
    都应该是对的。   你是说我访问的ie窗口内容不存在吗???
      

  3.   

    我用这个程序尝试过了不同的 IE 窗口了,都不行。不可能页面都没有加载完毕吧。而且,可以成功的用flashget从这些 IE 窗口里获取内容,链接等等。它是怎么做到的?
    还有别的方法吗?会不会是机器环境的问题? 明天我找别的机器试一下。
      

  4.   

    首先感谢蒋大虾的多次回复。我现在在家里的电脑上,重新编译了那个来自微软网站上的程序,运行正常。
    至于原因,不得不汗一下,我还不知道,也许公司的代码被我改乱了吧。:(我想取得选中网页的内容,但自己在msdn摸索多次,未果。能麻烦你再看一下吗?
    我是这样的
    CComPtr<IDispatch> spDisp;
    CComQIPtr<IHTMLWindow2> spWin;
    pHTMLDoc->get_Script( &spDisp );
    spWin = spDisp;
    spWin->get_document( &pHTMLDoc.p );
    spDoc->put_bgColor( CComVariant("red") );// Change background color to red
    //以上都是微软网站的代码,下面是我自己加的。
    CComPtr<IHTMLSelectionObject> pSelObj;
    CComPtr<IHTMLTxtRange> pTxtRange;
    hres = pHTMLDoc->get_selection(&pSelObj);
    hres = pSelObj->createRange((IDispatch**)&pTxtRange);//这两个函数都是成功的//但为什么下面对pTxtRange,无论是select,findText,还是get_htmlText都出现指针错误????
      

  5.   

    pHTMLDoc不是正确的IhtmlDocument2指针,处理DocumentComplete事件,这里得到的指针才是对的
      

  6.   

    hres = pHTMLDoc->get_selection(&pSelObj);
    hres = pSelObj->createRange((IDispatch**)&pTxtRange);
    //这两个函数都是成功的,hres = 0;而pTxtRange指针不为0.但是下面对pTxtRange操作都是不成功的。郁闷,不懂IE编程.
      

  7.   

    上www.codeguru.com下载,那里有代码