2012-03-30 82 views
1

我買了這個鍵盤http://www.mobilitylab.eu/mini-design-touch-silver.html 107觸摸, ,我想要一個鍵盤把它放在我的左手上。 但是當我們激活鍵盤的numlock時,它激活鍵盤上的numlock。 所以我們有456-而不是uiop。 我發現這個程序,但它不適用於64位操作系統。 http://www.bellamyjc.org/fr/systeme.html#knumlock掛鉤鍵盤更改密鑰代碼

所以我想用C++做我自己的程序,但它不能正常工作,掛鉤是好的(WH_GETMESSAGE),但我不明白我們如何改變鍵碼以及如何找到它是一個鍵盤或鍵盤的鍵?

這裏,這是我的代碼,我嘗試更改消息:

//-----------------Keyboard Hook Callback---------------// 
Hookmsg_API LRESULT CALLBACK Hookmsg(int ncode,WPARAM wparam,LPARAM lparam){ 
    //if(ncode>=0) // 
    if(ncode<0) 
     return CallNextHookEx(hook,ncode,wparam,lparam); 
    MSG *msg; 
    msg=(MSG *)lparam; 
    WORD newVK,oldVK; 
    WORD newSC,oldSC; 

    if(ncode==HC_ACTION) 
    { 
     if((msg->message == WM_KEYUP))//Check whether key was pressed(not released).) 
     { 
      oldVK=msg->wParam; 
      oldSC=SCANCODE(msg->lParam); 
      bool extendkey=false; 
      if(((HIWORD(msg->wParam) & 0x0100) == 0x0100)) 
      { 
       extendkey=true; 
      } 
      if(!extendkey) 
      { 
       bool modif=true; 
       switch(oldVK)//wparam 
       { 
        case VK_INSERT: newVK=VK_NUMPAD0; break; 
        case VK_END: newVK=VK_NUMPAD1; break; 
        case VK_DOWN: newVK=VK_NUMPAD2; break; 
        case VK_NEXT: newVK=VK_NUMPAD3; break; 
        case VK_LEFT: newVK=VK_NUMPAD4; break; 
        case VK_CLEAR: newVK=VK_NUMPAD5; break; 
        case VK_RIGHT: newVK=VK_NUMPAD6; break; 
        case VK_HOME: newVK=VK_NUMPAD7; break; 
        case VK_UP: newVK=VK_NUMPAD8; break; 
        case VK_PRIOR: newVK=VK_NUMPAD9; break; 
        case VK_DELETE: newVK=VK_DECIMAL; break; 
        default: modif=false; 
       } 
       if(modif==true) 
       { 

        msg->wParam = VK_NUMPAD0; 
        UINT newSC=MapVirtualKey(VK_NUMPAD0,MAPVK_VK_TO_VSC); 
        msg->lParam &= 0xFF00; 
        msg->lParam += (newSC << 16); 
        //MessageBox(NULL, TEXT("OK"), TEXT("Error!"), MB_OK); 
       } 
      } 

     } 
    } 
    return (CallNextHookEx(hook,ncode,wparam,lparam));//pass control to next hook in the hook chain. 
} 

回答

0

鍵盤輸入不僅僅是windows消息。在某些情況下修改這些消息可能會起作用,但這是一個非常不完整的解決方案。您還需要考慮駕駛員狀態,GetKeyboardState等。

如果要重新映射鍵盤上的鍵,可以創建新的鍵盤佈局並將其分配給語言環境。

如果鍵盤佈局不能滿足您的需求,您將需要編寫一個鍵盤設備驅動程序。

如果您只在特定應用程序(而非全局系統)中需要此功能,那麼您可能會很幸運並且只能修改Windows消息。