Использую глобальный хук WM_KEYBOARD_LL, для отлова сообщений о нажатых клавишах. Как при нажатии определённой клавиши отменить её действие, а лучше, переназначить его? Пример: нажали NUM PAD 5, получили 'n'. Иными словами, программное переназначение клавиши. P.S.: пробовал WH_GETMESSAGE, но он ловит только сообщения текущей программы. P.S.S.: пробовал отменить так,но не получилось:
keybd_event(key, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
Для отмены нажатия клавиши, функция LowLevelKeyboardProc должна вернуть ненулевое значение. Чтобы сгенерировать свое событие нажатие клавиши, можно использовать SendInput
LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT* details = (KBDLLHOOKSTRUCT*) lParam;
INPUT ip;
if(code == HC_ACTION && wParam == WM_KEYDOWN)
{
if(details->vkCode == code)
{
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.wVk = new_code;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
return 1;
}
}
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Перегруженный метод не видит другие методы класса и публичные членыИз-за чего может такое случиться?
Как считывать количество чисел в файле? Спасибо всем!
Как запустить консольную программу сделанную в Visual Studio через CreateProcess? Ошибок не выскакивает, но программа не запускается