4

キーボードとマウスの両方から生データを取得しています。キーボード データはアプリケーションに完全に受信されており、まったく問題はありません。どういうわけか、アプリケーションでマウス データがまったく受信されません。if (raw->header.dwType == RIM_TYPEMOUSE)実際、それは条項さえ通過しません。

case WM_CREATE:{

    /*  ...
        other initialisations 
        ... */

    // register for raw data
    rid[0].dwFlags=RIDEV_NOLEGACY|RIDEV_INPUTSINK;  // ignore legacy messages
    rid[0].usUsagePage=1;                           
    rid[0].usUsage=6;                               // keyboard
    rid[0].hwndTarget=hWnd;

    rid[1].dwFlags=RIDEV_NOLEGACY;                  // ignore legacy messages   
    rid[1].usUsagePage=1;                           
    rid[1].usUsage=2;                               // mouse
    rid[1].hwndTarget=hWnd;



    RegisterRawInputDevices(rid,2,sizeof(RAWINPUTDEVICE));

    break;
}

case WM_INPUT:{         
    if(GetRawInputData((HRAWINPUT)lParam,RID_INPUT,NULL,&dwSize,sizeof(RAWINPUTHEADER))==-1){
        break;
    }
    LPBYTE lpb=new BYTE[dwSize];
    if(lpb==NULL){
        break;
    } 
    if(GetRawInputData((HRAWINPUT)lParam,RID_INPUT,lpb,&dwSize,sizeof(RAWINPUTHEADER))!=dwSize){
        delete[] lpb;
        break;
    }

    PRAWINPUT raw=(PRAWINPUT)lpb;
    UINT KeyEvent;

    if (raw->header.dwType == RIM_TYPEKEYBOARD)
    {
        KeyEvent=raw->data.keyboard.Message;
        keyChar=MapVirtualKey(raw->data.keyboard.VKey,MAPVK_VK_TO_CHAR);

        if(KeyEvent==WM_KEYDOWN){

            /* Works great */

        }

    }

    else if (raw->header.dwType == RIM_TYPEMOUSE)
    {

        WriteFile(hFile, TEXT_ENTER, strlen(TEXT_ENTER), &fWritten, 0);                 // TEXT_ENTER contains "Mouse event occured"
            // Even this never gets executed. My file never gets logged with this message

        LMButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_LEFT_BUTTON_DOWN;
        MMButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_MIDDLE_BUTTON_DOWN;
        RMButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_RIGHT_BUTTON_DOWN;


        if (LMButtonDown)
            WriteFile(hFile, LCLICK, strlen(LCLICK), &fWritten, 0);                 // LCLICK contains "Left mouse button clicked"
        if (MMButtonDown)
            WriteFile(hFile, MCLICK, strlen(MCLICK), &fWritten, 0);                 // MCLICK contains "Middle mouse button clicked"
        if (RMButtonDown)
            WriteFile(hFile, RCLICK, strlen(RCLICK), &fWritten, 0);                 // RCLICK contains "Right mouse button clicked" */
    }
    delete[] lpb;       
    CloseHandle(hFile);
    break;
              }

誰か間違いを見つけて、それが何であるか教えてもらえますか?

4

1 に答える 1