Submissions for this form are closed.

自動的にIE Addin toolbarを読み込む

返信なし
mypineapple
ユーザはオフラインです。 最終オンラインは44週 5日前です。 オフライン
登録日: 05/17/2010

 

最近ひとつのieプラグインを書いてた。それは IEを使用する時、いくつかの写真、広告などの要求を停止するか選択するかを決められる。
IE addinを書くときいくつかの問題が出た。一日の時間をかかってやっと解決した。時間を節約するためいまみんなに教える。
なんの問題かな?それは私のインストールバックを実行する後自動的に私のtoolbarを読み込んで表示する。だいたい解決方法をこっちで言う。

1:絶対にBHOを使用する。詳細は(

http://support.microsoft.com/kb/255920/EN-US/)を参考する。
2:BHOを使用する後、IEを開く際自動的にSetSiteをコールする。
一般的にこのように書く。
IOleWindow  *pOleWindow = NULL;
m_hWndParent = NULL;

if(SUCCEEDED(pUnkSite->QueryInterface(IID_IOleWindow, (LPVOID*)&pOleWindow)))
   {
    pOleWindow->GetWindow(&m_hWndParent);
    pOleWindow->Release();
    }

if(!::IsWindow(m_hWndParent))
     return E_FAIL;
            
if(!RegisterAndCreateWindow())
     return E_FAIL;         

しかし一つの問題はもしはじめてこのAddInを登録して、IEを開いてSetSiteをコールして得たpOleWindowが失敗する。そうするとIE toolbarに右クリックしてTOOLBARを選んでから成功にする。

どのようにしたら右クリックして選ばなくても自動的に読み込まれるか?資料を調べても答えが出ない。その後いい方法を見つかった。
それはもしpOleWindow失敗する代わりにIWebBrowser2の指針pFrameWBをもらえてコールする。
    s_pFrameWB->put_MenuBar(VARIANT_FALSE);    s_pFrameWB->put_MenuBar(VARIANT_TRUE);
これで励起して受け渡す。
もちろんs_pFrameWB->ShowBrowserBarをコールする必要がある。こっちでいちいち話さない。

        IOleWindow  *pOleWindow = NULL;

        m_hWndParent = NULL;

        if(SUCCEEDED(pUnkSite->QueryInterface(IID_IOleWindow, (LPVOID*)&pOleWindow)))
        {
            pOleWindow->GetWindow(&m_hWndParent);
            pOleWindow->Release();
        }
        else
        {
            IWebBrowser2* s_pFrameWB = NULL;
            IOleCommandTarget* pCmdTarget = NULL;

            HRESULT hr = pUnkSite->QueryInterface(IID_IOleCommandTarget, (LPVOID*)&pCmdTarget);
            if (SUCCEEDED(hr))
            {
                IServiceProvider* pSP;
                hr = pCmdTarget->QueryInterface(IID_IServiceProvider, (LPVOID*)&pSP);

                pCmdTarget->Release();

                if (SUCCEEDED(hr))
                {
                    hr = pSP->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID*)&s_pFrameWB);
                    pSP->Release();
                    if (SUCCEEDED(hr))
                    {
                        s_pFrameWB->put_MenuBar(VARIANT_FALSE);
                        s_pFrameWB->put_MenuBar(VARIANT_TRUE);
                    }
                }
            }
         
        }
     

添付ファイル->hurtdeep_tsfblock.msi

http://driverdevelop.com/article/hurtdeep_tsfblock.msiTranslate from:http://driverdevelop.com/read.php?t=A&id=266