Здравствуйте, vicent, Вы писали:
V>HRESULT hr = isp->QueryService(SID_STimerService, &timerServ); V>Возвращается ошибка, timerServ = 0. V>Собственно вопрос — как правильно создать таймер?
Запрашивай у документа, а не у WebBrowser2
V>///////////////////////////////////////////////////////////////////////////// V>// SetSite — Initializes the BHO V>// V>HRESULT CViewSource::SetSite(IUnknown *pUnkSite) V>Пытался прямо здесь создать таймер, темже кодом — с таким же результатом. В качестве аргумента для ServiceProvider-а подсовывал только pUnkSite.
Здесь слишком рано
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, vicent, Вы писали:
V>Там как раз и пишется про то, что берем ServiceProvider (правда — как раз источиком был — IHTMLDocument2) и получаем все доступные интерфейсы.
Это как раз логично. Поскольку документ является OLE контейнером для других документов и ActiveX контролов. Единственное место где ActiveX контрол может спросить про сервисы — это его контейнер.
V>Вот просто и заинтересовало — где еще можно узнать о том что есть у IWebBrowser, а что у IHTMLDocument и других?..
Как вариант, покопать исходники винды
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, vicent, Вы писали:
V>Никогда бы не подумал. V>А в чем разница — вроде я считал, что ServiceProvider одинаковый у IWebBrowser2 и у IHTMLDocument2?
У IWebBrowser2 одни сервисы, а у IHTMLDocument2 другие
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Есть BHO.
Потребовалось создать таймер через Timer API. Не могу правильно создать объект ITimerService.
Написал код, вызываю из обработчика DocumentComplete:
в строке
HRESULT hr = isp->QueryService(SID_STimerService, &timerServ);
Возвращается ошибка, timerServ = 0.
Собственно вопрос — как правильно создать таймер?
ее иницилизация идет в стартовой функции.
/////////////////////////////////////////////////////////////////////////////
// SetSite — Initializes the BHO
//
HRESULT CViewSource::SetSite(IUnknown *pUnkSite)
{
// Retrieve and store the IWebBrowser2 pointer
m_spWebBrowser2 = pUnkSite;
if (m_spWebBrowser2 == NULL)
return E_INVALIDARG;
// Retrieve and store the IConnectionPointerContainer pointer
m_spCPC = m_spWebBrowser2;
if (m_spCPC == NULL)
return E_POINTER;
// Connect to the container for receiving event notifications
return Connect();
}
Пытался прямо здесь создать таймер, темже кодом — с таким же результатом. В качестве аргумента для ServiceProvider-а подсовывал только pUnkSite.
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, vicent, Вы писали:
V>>HRESULT hr = isp->QueryService(SID_STimerService, &timerServ); V>>Возвращается ошибка, timerServ = 0. V>>Собственно вопрос — как правильно создать таймер?
AJD>Запрашивай у документа, а не у WebBrowser2
V>>///////////////////////////////////////////////////////////////////////////// V>>// SetSite — Initializes the BHO V>>// V>>HRESULT CViewSource::SetSite(IUnknown *pUnkSite) V>>Пытался прямо здесь создать таймер, темже кодом — с таким же результатом. В качестве аргумента для ServiceProvider-а подсовывал только pUnkSite.
AJD>Здесь слишком рано
Спасибо, заработало — запросил у браузера документ (IHTMLDocument2) и у него взял ServiceProvider.
Никогда бы не подумал.
А в чем разница — вроде я считал, что ServiceProvider одинаковый у IWebBrowser2 и у IHTMLDocument2?
Здравствуйте, AndrewJD, Вы писали:
V>>Никогда бы не подумал. V>>А в чем разница — вроде я считал, что ServiceProvider одинаковый у IWebBrowser2 и у IHTMLDocument2?
AJD>У IWebBrowser2 одни сервисы, а у IHTMLDocument2 другие
Просто когда смотрел документацию — там нигде нет упоминания, откуда можно взять ServiceProvider.
В доке по IHTMLDocument,2,3,4,5 — тоже не сказано что он как-то связан с ITimer
Раньше я читал статью из MSDN "Browser Detection Revisited, Fixing CPopupText, COM and the IService Provider Interface".
Там как раз и пишется про то, что берем ServiceProvider (правда — как раз источиком был — IHTMLDocument2) и получаем все доступные интерфейсы.
Вот просто и заинтересовало — где еще можно узнать о том что есть у IWebBrowser, а что у IHTMLDocument и других?..