私はInternet Explorer 11をC++アプリケーションに組み込みました。これは、外部オブジェクトの私の実装を返しGetExternalを除いて、元の実装にすべてのメソッドを通過IEleのIOleClientSite実装がWM_KEYUPを失うWM_KEYDOWNイベント
IDocHostUIHandler
:私は、次のインターフェイスを実装しています。
IOleClientSite
これは、元の実装に至るすべてのメソッドを通過します。要求された場合、QueryInterface実装はIDocHostUIHandlerを返します。また、IUnknownのためにそれ自体を返します。 他のインターフェイスの要求を元のIOleClientSiteの実装に渡してみましたが、これは以下の問題には影響しません。
DOMイベントを処理して起動する目的で、現在のドキュメントにイベントシンクを添付しましたが、これは問題の一部ではないと確信しています。
問題は、ブラウザがWM_KEYDOWNとWM_KEYCHARメッセージを無視している(これらはDOMイベントとして解雇されることはありません)が、私は私のIOleClientSiteの実装を挿入しない場合は(DOMのキー押下イベントとして起動されます。)WM_CHARメッセージ に応えるということですこれらのイベントは適切に処理されます。したがって、私はIOleClientSiteの実装にいくつかの抜けがあることをかなり確信しています。 実装のIDocHostUIHandlerを提供するためにIOleClientSiteを実装する必要があることを理解しています(つまり、そのインターフェイスの実装を挿入する方法は他にありません)。 WM_KEYDOWNおよびWM_KEYCHARメッセージは無視されます。
他のすべてが正しく動作していることに注意してください。 JavaScriptから外部オブジェクトのメソッドを呼び出すことはできますが、イベントシンクでDOMイベントを受け取ることができ、イベントをDOMに送信できます。
価値があるのは、基礎となるサイトがQT 3.3 QAxWidgetによって提供されていることです。私はこれが時代遅れであることを認識しています。この作業は最終的にこの古いコードへの依存を取り除くことを意図しています。それにもかかわらず、IOleClientSiteが削除されたときにブラウザが正しく動作するため、QAxWidget実装で問題が発生するとは考えられません。
埋め込みIE11コントロールで[WM \ _KEYUPおよびWM \ _KEYDOWNのメッセージが失われる可能性があります](http://stackoverflow.com/questions/40977258/wm-keyup-and-wm-keydown-messages-lost-in-組み込まれた-11制御) – acelent