Пожалуйста, помогите мне понять, что я делаю неправильно!
У меня проблема при программной активации панели инструментов IE из другой программы.
Делать это, следуя инструкциям, приведенным на сайте поддержки Microsoft (http://support.microsoft.com/kb/q255920/):
SHDocVw::IWebBrowser2Ptr pIE;
HRESULT hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID*)&pIE);
if(FAILED(hr)) return;
try {
_variant_t vClsID;
_variant_t vVis;
_variant_t vNotUsed;
vClsID.vt = VT_BSTR;
vClsID.bstrVal = SysAllocString(OLESTR("{MY_TOOLBAR_GUID}"));
vVis.vt = VT_BOOL;
vVis.boolVal = VARIANT_TRUE;
vNotUsed.vt = VT_INT;
vNotUsed.intVal = 1;
hr = pIE->ShowBrowserBar()(&vClsID, &vVis, &vNotUsed);
SysFreeString(vClsID.bstrVal);
if(FAILED(hr)) return;
}catch(...) {return;}
pIE->Navigate2(&Url);
pIE->Visible = TRUE;
Этот код работает правильно в IE7, но не работает в IE8. В обоих случаях ShowBrowserBar () возвращает S_OK, но в IE8 toolbar.dll не загружается в браузер, то есть панель инструментов не активируется и, следовательно, не отображается.
Я также попытался запустить IE8 с тремя вкладками и проверить, пытается ли ShowBrowserBar () открыть панель инструментов на вкладках, а не процесс менеджера.
Это файл журнала:
Handle url 'outlook:'
ShowBrowserBar() FAILED!
Handle url 'http://www.handypassword.com'
ShowBrowserBar() SUCCESSED!
Handle url 'http://www.google.ru/'
ShowBrowserBar() SUCCESSED!
Handle url 'http://vkontakte.ru/'
ShowBrowserBar() SUCCESSED!
В IE7 все работает, как и ожидалось, но не в IE8, и я не могу понять, почему метод ShowBrowserBar () возвращает S_OK в обоих из них.
У кого-нибудь есть какие-нибудь подсказки?
С уважением,
Anna.