winapi handling multiple keys

I need the program to be able to handle multiple keys at the same time. For this I wrote this code:

    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 accepts the second parameter of the hardware key scanning code, it says on msdn that WM_KEYDOWN should supposedly pass it through lparam, but something wrong comes to lparam. Where can I get the hardware key scan code or are there other ways to implement this?

>Solution :

As stated in the documentation of WM_KEYDOWN, bits 16 to 23 of lParam contain the scan code.

To extract the scan code from lParam, you can use the following line:

DWORD dwScanCode = ( lParam >> 16 ) & 0xFF;

Leave a Reply