2011-07-10 26 views
1

在win32中有一個函數可以接受CTRL,ALT或大寫鎖鍵的虛擬鍵代碼&返回一個字符串,說「CTRL」,「ALT」,「CAPSLOCK」?從WM_KEYDOWN消息中檢測到非字符按下

我只能接收WM_KEYDOWN消息,但不能接收WM_CHAR消息。我知道我可以通過將虛擬鍵代碼傳遞給函數ToUnicode()來確定已經按下了哪個字符鍵,它會告訴我什麼字符鍵已經被按下。

但是,如果我傳遞CTRL虛擬鍵代碼,該函數將不會返回任何內容。

char keyPressed[256]; 
KBDLLHOOKSTRUCT kbdStruct = *((KBDLLHOOKSTRUCT*)lParam); 
GetKeyboardState((PBYTE)&keyState); 
ToUnicode(kbdStruct.vkCode, kbdStruct.scanCode, (PBYTE)&keyState, (LPWSTR)&keyPressed, sizeof(keyPressed)/2, 0);  
// so if the key pressed was 'a' then keyPressed = "a"; 
// & if the key pressed was CTRL then keyPressed = "CTRL"; 

回答

2

您可以從WM_KEYDOWNGetKeyNameTextlParam值傳遞,它會爲你返回鍵名。

+1

「該函數可能爲不同的輸入語言環境提供不同的結果」。例如,不要指望Ctrl在德語中被命名爲Ctrl。 – MSalters