2012-03-30 9 views
1

Ich habe diese Tastatur http://www.mobilitylab.eu/mini-design-touch-silver.html 107 Touch, kaufen, und ich möchte eine Tastatur, um es auf meiner linken Hand. , aber wenn wir den Numlock des Keypads aktivieren, aktiviert er den Numlock auf der Tastatur. Also haben wir 456- statt Uiop. Ich habe dieses Programm gefunden, aber es funktioniert nicht auf einem 64-Bit-Betriebssystem. http://www.bellamyjc.org/fr/systeme.html#knumlock.Haken Tastatur zum Ändern des Tastencodes

Also ich möchte mein eigenes Programm mit C++ machen, aber es funktioniert nicht gut, der Haken ist in Ordnung (WH_GETMESSAGE), aber ich verstehe nicht, wie wir den Schlüsselcode ändern können und wie wir finden können, wenn es ein ist Taste der Tastatur oder der Tastatur?

Hier dies ist mein Code, wo ich versuche, um die Nachricht zu ändern:

//-----------------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. 
} 

Antwort

0

Tastatureingabe ist viel mehr als nur Windows-Nachrichten. Das Ändern der Nachrichten funktioniert in einigen Fällen, ist jedoch eine sehr unvollständige Lösung. Sie müssen auch den Treiberstatus GetKeyboardState und andere berücksichtigen.

Wenn Sie Schlüssel auf Ihrer Tastatur neu zuordnen möchten, können Sie ein neues Tastaturlayout erstellen und einem Gebietsschema zuweisen.

Wenn Tastaturlayouts Ihren Anforderungen nicht entsprechen, müssen Sie einen Tastaturgerätetreiber schreiben.

Wenn Sie diese Funktionalität nur in einer bestimmten Anwendung (nicht weltweit) benötigen, können Sie vielleicht Glück haben und nur Windows-Nachrichten ändern.

Verwandte Themen