如题,如何在IE插件在页面上显示出来时获取插件的信息?如插件名和安装路径就是页面完全显示出来后,在页面的上边,插件已经显示出来,询问用户要不要加载时,如何获取插件的信息?
我想在BHO里面动态获取插件的信息,
想知道在IE事件,Document事件,或是HTMLElements事件的那个具体事件里获取插件的信息?
如何获取?
大家帮帮忙

解决方案 »

  1.   

    你的BHO加载之前其他的BHO就可能已经加载了。到IE事件触发的时候则是肯定已经加载了
      

  2.   

    不是BHO插件,我要做一个BHO插件,获取的是ActiveX插件,即OLE插件或是OCX控件,此时还没有加载呢
    只是在页面上显示出来一个提示条,询问要不要加载?
    这个应该可以获取信息吧
      

  3.   

    通过CLSID从注册表中获取对应的文件信息
      

  4.   

    可以在运行时在HTML里面查找替换<object>
      

  5.   

    这个是可以的,先取得这个控件的GUID或名称,不过最终是要转为GUID的。有了GUID可以在注册表查找到安装位置。但要用权限,如果没有权限,你的ACTIVEX中是读取不到这些系统信息的。在直接的ACTIVEX中,并未提供这样的接口。
      

  6.   

    不好意思,原来你还没有取得名称,这个比较麻烦呢。首先你要先安装:Microsoft Active Accessibility
    然后注册WM_HTML_GETOBJECT消息:
    UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); 
    有段代码可供参考:
    IHTMLDocument2* GetDocInterface(HWND hWnd) 

    // 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA,通过MSAA来得到加载了什么ACTIVEX控件。
    CoInitialize(NULL); 
    HINSTANCE hInst = ::LoadLibrary(_T("OLEACC.DLL")); 
    IHTMLDocument2* pDoc2=NULL; 
    if ( hInst != NULL ) 

    if ( hWnd != NULL ) 

    CComPtr <IHTMLDocument> spDoc=NULL; 
    LRESULT lRes; UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); 
    ::SendMessageTimeout(hWnd,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)) 

    CComPtr <IDispatch> spDisp; 
    CComQIPtr <IHTMLWindow2> spWin; 
    spDoc->get_Script( &spDisp ); 
    spWin = spDisp; 
    spWin->get_document( &pDoc2 ); 



    ::FreeLibrary(hInst); 

    else{//如果没有安装MSAA 
    MessageBox(NULL,"请您安装Microsoft Active Accessibility","提示",NULL); 
    //MessageBox(_T("请您安装Microsoft Active Accessibility")); 

    CoUninitialize(); 
    return pDoc2;