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 在 lParam 中,而不是 wParam。wParam 包含窗口消息。

其次,将 lParam 原样传递给编辑控件。您需要构造适当的 lParam(请参阅 WM_KEYDOWN、WM_KEYUP 等的文档)。

第三,您将 wParam 作为重新生成的键盘消息的 wParam 传递给 hook proc(即消息)——它应该是您从 KBDLLHOOKSTRUCT 获得的虚拟键代码。

第四,如果 nCode < 0,您最终会调用 CallNextHookEx 两次。

于 2010-02-01T23:35:24.587 回答