0

gMsgHook = SetWindowsHookEx(WH_KEYBOARD_LL, GetMsgHookProc, ghInstDll, 0);

.......

extern "C" HOOK_DLL_API LRESULT CALLBACK GetMsgHookProc(int nCode, WPARAM wParam, LPARAM     lParam)
{
 if (nCode < 0){
   CallNextHookEx(gMsgHook, nCode, wParam, lParam);
 }

 KBDLLHOOKSTRUCT *dl = (KBDLLHOOKSTRUCT*)wParam;

 if (nCode >= HC_ACTION){
  // message mirror to hEdit1
  // doesnt typing work
  SendMessage(hEdit1, wParam, wParam, lParam);
 }

  return CallNextHookEx(gMsgHook, nCode, wParam, lParam);
}
4

1 に答える 1

0

コード スニペットに多数のエラーがあります。

まず、フックに渡される KBDLLHOOKSTRUCT は、wParam ではなく、lParam にあります。wParam にはウィンドウ メッセージが含まれます。

次に、lParam をそのままエディット コントロールに渡します。適切な lParam を作成する必要があります (WM_KEYDOWN、WM_KEYUP などのドキュメントを参照してください)。

3 番目に、再生成されたキーボード メッセージの wParam としてフック プロシージャ (メッセージ) に wParam を渡します。これは、KBDLLHOOKSTRUCT から取得した仮想キー コードである必要があります。

第 4 に、nCode < 0 の場合、CallNextHookEx を 2 回呼び出すことになります。

于 2010-02-01T23:35:24.587 に答える