各位前辈,我是IE新手,以下问题请教:       有个网页通过JS加载了一个flash控件,我想用编程的方式实现其自动全屏播放。如何取得这个控件的指针?我试着用BHO获取ONREADYSTATECHANGE事件,但不成功。谢谢指教

解决方案 »

  1.   

    HttpWebRequestx和HttpWebResponse类 
    可以实现 通过响应可以读取Stream流  然后用XmlDocument进行解析提取控件 并进行赋值等操作
      

  2.   

    谢谢楼上两位,我对HttpWebRequestx和HttpWebResponse还很陌生。蒋老师,我现在拿到了IHTMLDocument2,如何继续获得IHTMLObjectElement::object呢?
      

  3.   

    查看 html 源码, 应该有 class 或者 id
    使用 document 的 getElementById 之类的找到她
    转换为 IHTMLObjectElement 类型
    再访问 object 属性就是了
      

  4.   

    谢谢楼上,网页中的控件是JS加载的,我看到JS文件里有
    classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" 。这个就是 IHTMLDocument3::getElementById里的参数吗?
      

  5.   

    不是
    那个是activex 的clsid
    <object id='aflashobject' clsid= .........>
    id='aflashobject' 里的 'aflshboject' 才是 IHTMLDocument3::getElementById('aflshboject')的参数
      

  6.   

    谢谢楼上,我操作的网页的ActiveX是JS加载的,   ="<object codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0\" id=\""+this.getAttribute("id")+"\"                     classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">";它的ID 是个函数。我是用 DOCUMENTCOMPLETE 事件来查询控件的。请问该事件发生时JS加载完成了吗?
    谢谢指教
      

  7.   

    谢谢楼上,我用IHTMLDocument2获取IHTMLDocument3时编译通过,一运行IE就崩溃了。CComPtr<IDispatch> pDisp1;
    m_spWebBrowser->get_Document(&pDisp1);
    CComPtr <IHTMLDocument2> pHTMLDoc2; 
    pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc2);
    CComPtr<IHTMLDocument3> pDoc3;
    HRESULT hr=pHTMLDoc2->QueryInterface(IID_IHTMLDocument3,(void**)&pDoc3);
    if(SUCCEEDED(hr))
       MessageBox(NULL,L"加油",L"BHO",MB_OK);这是什么问题呀?  我用的XP+IE6+VS2008
      

  8.   

    前面是pDisp1,到第四行怎么就成了pDisp了。
      

  9.   

    谢谢楼上,确是你指出的问题。
    现在我能得到IHTMLElement,往下查询IHTMLObjectElementCComPtr<IHTMLObjectElement> objelem;
    hr=pElem->QueryInterface(&objelem);
    if(SUCCEEDED(hr)) MessageBox(NULL,L"加油",L"BHO",MB_OK);执行这几行IE又崩溃了。
      

  10.   

    忙活了一下午,我拿到的IHTMLElement指针竟是个NULL,我估计DOCUMENTCOMPLETE 事件发生时JS 还没有加载,下面是网页源码的两行<body onload="Init()">
      <div id="flash_box"class="flash_bg">Init()是JS的入口函数各位前辈帮我看一下,我上面的理解对不对? 如果是这样,我应该再以那个事件为触发点呢?
      

  11.   

    谢谢楼上各位,我打算用hook来钩CoCreateInstance获得shockwave控件的指针了。遇到问题还要烦请各位前辈指教
      

  12.   

    不用那么复杂的hook在接收到DOCUMENTCOMPLETE 事件之后,用postmessage投递一个消息,
    这样就可以保证这个消息在onload="Init()"之后执行了。
      

  13.   

    这个问题我还没有解决。请问楼上,我在收到DOCUMENTCOMPLETE 事件之后,用postmessage能查询到flash控件接口吗?往下如何做,请提示一下
      

  14.   

    如果创建有窗口句柄的话,用postmessage投递一个消息,在这个消息中尝试查询接口
      

  15.   

    蒋老师,flash控件的文档网上很多。我现在的问题是:1. 要操作flash自动全屏,是通过修改属性来实现,还是接收事件再调用全屏函数?2. flash视频播放时,原画面是4:3的,初始比例变形为16:9 ,人都被增肥了。
       
       怎样把画面恢复原比例?
    flash 提供了2个可视化按钮,比例切换和全屏切换。我不想人工操作,想搞个自动化。
      

  16.   

    我的建议,既然找到了flash的文档,就多看几遍,多试几次,自然就水到渠成了。
      

  17.   

    谢谢楼上,我看了几遍,确有进步。想在我想通过flash的方法 TSetProperty 修改属性,可是对这个命令的第一个参数不知道怎么填。