如何发送,键盘消息镜像到edit1控件

时间:2010-02-01 23:19:23

标签: visual-c++ messages mirror wh-keyboard-ll

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);
}

1 个答案:

答案 0 :(得分:0)

您的代码段中有很多错误。

首先,传递给钩子的KBDLLHOOKSTRUCT位于lParam中,而不是wParam。 wParam包含窗口消息。

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

第三,将wParam传递给钩子proc(这是消息)作为重新生成的键盘消息的wParam - 它应该是你从KBDLLHOOKSTRUCT获得的虚拟键码。

第四,如果nCode&lt; 0你最后两次调用CallNextHookEx。