MSHTML IWebBrowser2 - Потеря событий страницы вызывает пропущенные нажатия клавиш? - PullRequest
0 голосов
/ 15 мая 2009

У меня небольшая проблема с моим приложением, использующим MSHTML. У меня все работает, кроме нечетного поведения при отсутствии нажатия клавиш при быстром наборе, как упомянуто в строке темы. Я думаю, что это может иметь отношение к методу, который я использую, чтобы потопить события?

Подробности: мое приложение представляет собой отдельную программу, написанную на C ++ и MFC в Visual Studio 2005. Программа подключается к текущему (независимому) экземпляру Internet Explorer, получает указатель на интерфейс IWebBrowser2 и передает его в объект типа CCmdTarget:


class CHandler : public CCmdTarget
{
  IWebBrowser2* m_pWebBrowser2;
  DWORD m_dwBrowserCookie;
  …
  DECLARE_DISPATCH_MAP()
};

Этот класс отслеживает, что происходит в браузере. Я опускаю события браузера с помощью следующей команды:


LPUNKNOWN pUnkSink = GetIDispatch(FALSE);
retval = AfxConnectionAdvise((LPUNKNOWN)m_pWebBrowser2, DIID_DWebBrowserEvents2, pUnkSink, FALSE, &m_dwBrowserCookie);

Если я закомментирую AfxConnectionAdvise, то никакие нажатия клавиш не будут пропущены, но больше событий не будет. Если я оставлю это внутри, я потоплю события, но пропущу случайное нажатие клавиши при быстром наборе.

Я знаю, что есть несколько способов подключения к событиям (AtlAdvise, точки подключения), но это был единственный способ, с помощью которого я мог работать.

Любые предложения будут великолепны!

Ответы [ 2 ]

0 голосов
/ 16 мая 2009

Под крышками все различные способы подключения (AtlAdvise, AfxConnectionAdvise и т. Д.), Все используют IConnectionPointContainer и IConnectionPoint - они просто экономят ваш набор шаблонов COM goo.

Я подозреваю, что это связано с тем, как вы подключаетесь к работающему экземпляру IE. Как вы получаете указатель IWebBrowser2? Вы загружаетесь в процесс IE или вы отдельный процесс? Если вы работаете в потоке, отличном от исходного потока IWebBrowser2 (поток пользовательского интерфейса вкладки IE), вы делаете правильный COM-маршаллинг?

0 голосов
/ 16 мая 2009

Если вы просто ищете нажатия клавиш, не можете ли вы выделить подкласс управления?

...