自動的にIE Addin toolbarを読み込む
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