0

MSHTML を使用しているアプリケーションに少し問題があります。件名に記載されているように、速く入力すると奇妙なキーストロークの欠落動作が発生することを除いて、すべてが機能しています。イベントをシンクするために使用する方法と関係があるのではないでしょうか?

詳細: 私のアプリケーションは、Visual Studio 2005 の C++ および MFC で記述された別個のプログラムです。プログラムは、現在実行中の (独立した) Internet Explorer のインスタンスにアタッチされ、IWebBrowser2インターフェイスへのポインターを取得し、それを type のオブジェクトに渡します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、これは私が機能させることができた唯一の方法でした。

どんな提案も素晴らしいでしょう!

4

2 に答える 2

0

カバーの下では、すべてのさまざまな接続方法 ( AtlAdviseAfxConnectionAdviseなど) がすべて and を使用IConnectionPointContainerIConnectionPointています。

これは、IE の実行中のインスタンスへの接続方法に関係していると思われます。どうやってIWebBrowser2ポインタを取得していますか?IE プロセスにロードされていますか、それとも別のプロセスですか? の元のスレッド (IE タブ UI スレッド) とは異なるスレッドで実行している場合IWebBrowser2、適切な COM マーシャリングを行っていますか?

于 2009-05-16T18:14:51.527 に答える
0

キーストロークを探しているだけなら、コントロールをサブクラス化できませんか?

于 2009-05-16T17:55:47.097 に答える