2012-03-30 4 views
1

私はこのキーボードを購入しましたhttp://www.mobilitylab.eu/mini-design-touch-silver.html 107タッチ、 と私は私の左手にそれを置くためにキーパッドをします。 しかし、キーパッドの数字キーを有効にすると、キーボードの数字キーが有効になります。 私たちはuiopの代わりに456-を持っています。 私はこのプログラムを見つけましたが、64ビットOSでは動作しません。 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

キーボード入力は、ウィンドウメッセージだけではありません。メッセージを変更することは場合によっては機能しますが、大いに不完全な解決策です。また、ドライバの状態、GetKeyboardStateなどを考慮する必要があります。

キーボードのキーを再マップする場合は、新しいキーボードレイアウトを作成してロケールに割り当てることができます。

キーボードのレイアウトがニーズを満たさない場合は、キーボードデバイスドライバを作成する必要があります。

特定のアプリケーション(システム全体ではない)でこの機能が必要な場合は、Windowsのメッセージだけを変更して幸運を祈ることができます。

関連する問題