winapi处理多个键
winapi handling multiple keys
我需要程序能够同时处理多个键。为此,我写了这段代码:
case WM_KEYDOWN:{
int debug=pix.getMsg().lParam;
if(debug>=16 && debug<=23){
char lpKeyState[256];
ZeroMemory(lpKeyState,256);
char input[2];
int symNum=ToAsciiEx(pix.getMsg().wParam,pix.getMsg().lParam,(BYTE*)lpKeyState,(WORD*)input,0,GetKeyboardLayout(0));
if(symNum==1)
keyboardInput.push_back(input[0]);
}
break;
}
ToAsciiEx 接受硬件键扫描码的第二个参数,在msdn 上说WM_KEYDOWN 应该通过lparam 传递它,但是lparam 出错了。我在哪里可以获得硬件密钥扫描码或者有其他方法可以实现吗?
如 WM_KEYDOWN
的文档所述,lParam
的第 16 位到第 23 位包含扫描码。
要从lParam
中提取扫描码,您可以使用以下行:
DWORD dwScanCode = ( lParam >> 16 ) & 0xFF;
我需要程序能够同时处理多个键。为此,我写了这段代码:
case WM_KEYDOWN:{
int debug=pix.getMsg().lParam;
if(debug>=16 && debug<=23){
char lpKeyState[256];
ZeroMemory(lpKeyState,256);
char input[2];
int symNum=ToAsciiEx(pix.getMsg().wParam,pix.getMsg().lParam,(BYTE*)lpKeyState,(WORD*)input,0,GetKeyboardLayout(0));
if(symNum==1)
keyboardInput.push_back(input[0]);
}
break;
}
ToAsciiEx 接受硬件键扫描码的第二个参数,在msdn 上说WM_KEYDOWN 应该通过lparam 传递它,但是lparam 出错了。我在哪里可以获得硬件密钥扫描码或者有其他方法可以实现吗?
如 WM_KEYDOWN
的文档所述,lParam
的第 16 位到第 23 位包含扫描码。
要从lParam
中提取扫描码,您可以使用以下行:
DWORD dwScanCode = ( lParam >> 16 ) & 0xFF;