Отображение сообщения, когда пользователь нажимает клавишу
Следующий фрагмент предназначен для отображения сообщения, когда пользователь вводит ключ. Даже когда акцент не на приложении. Но, похоже, проблема в следующем коде. Он не вызывает функцию, зарегистрированную в цепочке соединений с окнами. Я думаю, что проблема с HINSTANCE hInst
, Как мне изменить приведенный ниже код, чтобы я мог видеть сообщение, когда пользователь нажимает клавишу.
// Global Variables
static HHOOK handleKeyboardHook = NULL;
HINSTANCE hInst = NULL;
void TestKeys_setWinHook // i call this function to activate the keyboard hook
(...) {
hInst = GetModuleHandle(NULL);
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // LowLevelKeyboardProc should be put in the hook chain by the windows,but till now it doesn't do so.
printf("Inside function setWinHook !");
}
// the following function should be called when the user taps a key.
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
printf("You pressed a key !\n");
return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);
}
Но окна не вызывают функцию LowLevelKeyboardProc
, Я не понимаю причину, но я уверен, что проблема с hInst
в функции крючка. Как мне нужно его инициализировать?
До сих пор вывод, который я вижу Inside function setWinHook !
1 ответ
Решение
Вот пример LowLevelKeyboardProc.
HHOOK hHook;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
{
printf("You pressed a key!\n");
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}