2012-06-16 44 views
3

我從鍵盤和鼠標都收到原始數據 - 鍵盤數據正在接收到我的應用程序完美,我沒有任何麻煩。不知何故,我的應用程序中沒有收到任何鼠標數據。事實上,它甚至沒有通過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; 
       } 

任何人都可以發現任何錯誤,告訴我它是什麼嗎?

回答

3

這是一個簡單的情況,將國旗RIDEV_INPUTSINK添加到dwFlags。我的應用程序不在前臺 - 並且此標誌使您能夠接收系統範圍的輸入(您的應用程序無需專注於接收輸入)。