MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Глобальный хук клавиатуры с целью изменить клавишу"
Answer 929087
Нет, это не работает. Смысл хуков - отслеживание событий, а не активное воздействие на них. Тем не менее, хук позволяет отменить событие, вернув из процедуры единицу, так что оно не дойдет до целевого приложения. Тогда вы можете сгенерировать вместо него свое с помощью SendInput:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { switch (wParam) { case WM_KEYDOWN: PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam; if(p->vkCode == VK_SPACE) { INPUT ip; ip.type = INPUT_KEYBOARD; ip.ki.wScan = 0; ip.ki.time = 0; ip.ki.dwExtraInfo = 0; ip.ki.wVk = 0x5A; //Z ip.ki.dwFlags = 0; // key press SendInput(1, &ip, sizeof(INPUT)); ip.ki.dwFlags = KEYEVENTF_KEYUP; // key release SendInput(1, &ip, sizeof(INPUT)); return 1; } break; } } return CallNextHookEx(NULL, nCode, wParam, lParam); }
События, сгенерированные SendInput, могут восприниматься некоторыми приложениями не так, как настоящие события клавиатуры.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.