2012-05-25 3 views
2

Следующий фрагмент предназначен для отображения сообщения, когда пользователь вводит ключ. Даже если фокус не включен в приложение. Но, похоже, проблема связана со следующим кодом. Он не вызывает функцию, зарегистрированную в цепочке с окнами. Я думаю, проблема связана с 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 !

+0

Практически идентичный http://stackoverflow.com/questions/10731172/cannot-see-the-message-when-user-presses-the-key – Deanna

+0

@Deanna да! начал эту работу после рассмотрения этого вопроса! –

ответ

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; 
} 
+0

не работает ... –

+0

Является ли 'handleKeyboardHook' NULL после вызова' SetWindowsHookEx'? – lukad

+0

нет, нет null. –

Смежные вопросы