2011-07-10 10 views
1

CTRL、ALT、またはcapslockキーの仮想キーコードを取ることができる関数がwin32にありますか?& "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

あなたはGetKeyNameTextからWM_KEYDOWNからlParam値を渡すことができ、それはあなたのためのキーの名前を返します。

+1

"関数が異なる入力ロケールに対して異なる結果を与えることがあります"。たとえば、ドイツ語でCtrlという名前のCtrlを期待しないでください。 – MSalters

関連する問題