2009-06-18 2 views
2

私は別のアプリケーションに配置したウィンドウを持っています。この場合、私はOutlook 2003のウィンドウに注入したカスタムアプリケーションを持っています。親ウィンドウインターセプトアクセラレータ

親ウィンドウ(ここではOutlook)に、アプリケーションでバックスペースキーを押したときにWM_COMMANDメッセージが表示される問題があります。私の限定されたWin APIの経験から、これは、親がバックスペースキーがアクセラレータだと思っていて、アプリケーションがそれを見る前に処理していることを示しているようです。

Outlookアクセラレータテーブルを取得するためにLoadAccelerators関数を試していますが、親ウィンドウのテーブルを取得する方法がわかりません。

アイデア?

EDIT:

WM_COMMAND wNotifyCode:1(加速器から送られた)WID:1405

私は私のテキストボックスがWM_KEYDOWNのときを取得することがわかります、私はバックスペースキーを押したときにここで がスパイ++から出力され、バックスペースキーが押されます。

P WM_KEYDOWN nVirtKey:VK_BACK cRepeat:1 ScanOcde:0EfExtended:0fAltDown:0fRepeat:0fUp:0

おかげでここでそのメッセージのスパイ++ラインがあります。

答えて

0

あなたはコードをOutlookプロセスに挿入していますか?悪意のあるように聞こえる...とにかく、アクセラレータテーブルは実際にウィンドウに関連付けられていません。これらはアプリケーションのメッセージポンプによって処理されます(TranslateAccelerator関数を参照)。あなたの最善の策はメッセージフックを使うことです。あなたのウィンドウにターゲットを絞った削除キーダウンメッセージが表示された場合は、別のプライベートメッセージをあなたのウィンドウに掲示し、Outlookがそれを見ないようにオリジナルを食べる。

+0

これまでXobniを使用しましたか?彼らは同じことをする。 OutlookのAPIは2003年には限られていますが、2007年はやや異なる話です。 助けてくれてありがとう、私はそれを確認します。 – Max

+0

私はこれがOutlookに統合するのに非常に一般的な方法であることに同意する必要があります。 – 76mel