Не получается включить тулбар IE
От: megasad  
Дата: 28.07.05 16:03
Оценка:
У меня есть программка к которой есть тулбар. В программе я создал меню в котором есть опция включить этот самый тулбар в IE. Аналогично, как у ReGet. Беда в том что его не получается включить. Сейчас я пытаюсь его включать функцией ShowBrowserBar но ничего не происходит. В MSDN для ShowBrowserBar написано
Remarks
The WebBrowser object ignores this method.
Ничего не понимаю. Кто-нибудь сталкивался с этой проблемой?
За помощь возможно вознаграждение.
Заранее спасибо
Re: Не получается включить тулбар IE
От: Conr Россия  
Дата: 28.07.05 17:34
Оценка:
Здравствуйте, megasad, Вы писали:

M>У меня есть программка к которой есть тулбар. В программе я создал меню в котором есть опция включить этот самый тулбар в IE. Аналогично, как у ReGet. Беда в том что его не получается включить. Сейчас я пытаюсь его включать функцией ShowBrowserBar но ничего не происходит. В MSDN для ShowBrowserBar написано

M>Remarks
M>The WebBrowser object ignores this method.
M>Ничего не понимаю. Кто-нибудь сталкивался с этой проблемой?
M>За помощь возможно вознаграждение.
M>Заранее спасибо
Код покажите... ибо работать должно
HRESULT showBand(IWebBrowser2* aIE, const CComBSTR& aCLSID, bool aShow)
{
    CComVariant vtBand(aCLSID);
    CComVariant vtShow = aShow;
    CComVariant    vtEmpty;

    HRESULT hr = aIE->ShowBrowserBar(&vtBand,&vtShow,&vtEmpty);
    ATLASSERT( SUCCEEDED(hr) );

    return hr;
}

Покажет тулбар RegEdit:
showBand(m_pWebBrowser2,"{17939A30-18E2-471E-9D3A-56DD725F1215}",true);
Re[2]: Не получается включить тулбар IE
От: Аноним  
Дата: 28.07.05 19:14
Оценка:
Здравствуйте, Conr, Вы писали:

Моя прога написана на С++ Builder поэтому для работы с COM использую WinAPI
Код такой

LONG nCount;
pShellWindows->get_Count(&nCount);
for (int i=0; i<nCount; i++){
VARIANT v,ur,flag,frame,post,headers;
v.vt=VT_I4;
v.llVal=i;
hr=pShellWindows->Item(v,&pDisp);
if(hr!=S_OK){
continue;
}
hr=pDisp->QueryInterface(IID_IWebBrowser2,(void**)&IE);
if(hr!=S_OK){
continue;
}
VARIANT vtBandGUID;
VariantInit(&vtBandGUID);

WCHAR find[255];
MultiByteToWideChar(CP_ACP,0,"{5C87AF9D-EA67-47AD-8069-1E2CFED6A01E}",-1,find,INTERNET_MAX_URL_LENGTH);
vtBandGUID.vt = VT_BSTR;
vtBandGUID.bstrVal = find;

VARIANT vtShow;
VariantInit(&vtShow);
vtShow.vt = VT_BOOL;
vtShow.boolVal = VARIANT_BOOL(true);

VARIANT varEmpty;
VariantInit(&varEmpty);
hr=IE->ShowBrowserBar(&vtBandGUID,&vtShow,&varEmpty);

}
Re[3]: Не получается включить тулбар IE
От: megasad  
Дата: 29.07.05 14:04
Оценка:
Здравствуйте, Conr, Вы писали:

Моя прога написана на С++ Builder поэтому для работы с COM использую WinAPI
Код такой

LONG nCount;
pShellWindows->get_Count(&nCount);
for (int i=0; i<nCount; i++){
VARIANT v,ur,flag,frame,post,headers;
v.vt=VT_I4;
v.llVal=i;
hr=pShellWindows->Item(v,&pDisp);
if(hr!=S_OK){
continue;
}
hr=pDisp->QueryInterface(IID_IWebBrowser2,(void**)&IE);
if(hr!=S_OK){
continue;
}
VARIANT vtBandGUID;
VariantInit(&vtBandGUID);

WCHAR find[255];
MultiByteToWideChar(CP_ACP,0,"{5C87AF9D-EA67-47AD-8069-1E2CFED6A01E}",-1,find,INTERNET_MAX_URL_LENGTH);
vtBandGUID.vt = VT_BSTR;
vtBandGUID.bstrVal = find;

VARIANT vtShow;
VariantInit(&vtShow);
vtShow.vt = VT_BOOL;
vtShow.boolVal = VARIANT_BOOL(true);

VARIANT varEmpty;
VariantInit(&varEmpty);
hr=IE->ShowBrowserBar(&vtBandGUID,&vtShow,&varEmpty);

}
Re: Не получается включить тулбар IE
От: Akai  
Дата: 01.08.05 07:44
Оценка:
Я делал это так: в dll с тулбаром реализуется еще и BHO (browser helper object).
В DllRegisterServer в реестре прописываются и тулбар, и BHO (см. MSDN).
BHO — это COM-объект, наследующий IObjectWithSite. В отличие от тулбара, экземпляр BHO сразу создается вместе с окном IE. Таким образом, в SetSite() у BHO добавляем код, который ищет в реестре определенный ключ и, если этот ключ есть, вызывает ShowBrowserBar(), показывающий наш тулбар. Все прекрасно работает.
Возможно, Вам подойдет и какой-нибудь более простой способ. Можно попробовать менять ключ ITBarLayout, отвечающий за видимость и расположение панелей IE. Формат ключа не документирован, но умельцам удавалось его использовать. Поиск по форуму.
Re[2]: Не получается включить тулбар IE
От: AndrewJD США  
Дата: 01.08.05 08:38
Оценка:
Здравствуйте, Akai, Вы писали:

A> Я делал это так: в dll с тулбаром реализуется еще и BHO (browser helper object).

A> В DllRegisterServer в реестре прописываются и тулбар, и BHO (см. MSDN).
A> BHO — это COM-объект, наследующий IObjectWithSite. В отличие от тулбара, экземпляр BHO сразу создается вместе с окном IE. Таким образом, в SetSite() у BHO добавляем код, который ищет в реестре определенный ключ и, если этот ключ есть, вызывает ShowBrowserBar(), показывающий наш тулбар. Все прекрасно работает.

Даже если включен опция "Lock The Toolbars"?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.