2012-05-25 33 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); 
} 

但Windows不會調用函數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

調用'SetWindowsHookEx'後'handleKeyboardHook' NULL? – lukad

+0

不,不爲null。 –

相關問題