как отправить, сообщение с клавиатуры, зеркало для редактирования1 - PullRequest
0 голосов
/ 02 февраля 2010

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 голосов
/ 02 февраля 2010

В вашем фрагменте кода множество ошибок.

Во-первых, KBDLLHOOKSTRUCT, который передается хуку, находится в lParam, а не в wParam. wParam содержит сообщение окна.

Во-вторых, вы передаете lParam как есть в элемент управления редактирования. Вам необходимо создать соответствующий lParam (см. Документацию для WM_KEYDOWN, WM_KEYUP и т. Д.).

В-третьих, вы передаете wParam процессу перехвата (который является сообщением) в качестве wParam для сообщения о восстановленной клавиатуре - это должен быть код виртуальной клавиши, полученный из KBDLLHOOKSTRUCT.

В-четвертых, если nCode <0, вы дважды вызовете CallNextHookEx. </p>

...