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;