2012-03-30 8 views
1

나는이 키보드를 http://www.mobilitylab.eu/mini-design-touch-silver.html 107 터치, 으로 구입했으며 키패드를 왼손에 넣기를 원합니다. 키패드의 numlock을 활성화하면 키보드의 numlock이 활성화됩니다. 우리에게는 uiop 대신 456-이 있습니다. 이 프로그램을 찾았지만 64 비트 OS에서는 작동하지 않습니다. http://www.bellamyjc.org/fr/systeme.html#knumlock.키 코드를 바꿀 수있는 키보드 후크

그래서 C++로 자체 프로그램을 만들고 싶지만 잘 작동하지 않습니다. 후크가 제대로 작동하지만 (WH_GETMESSAGE) 키 코드를 어떻게 바꿀 수 있는지, 그리고 어떻게 찾았는지 이해할 수 없습니다. 키패드의 키 또는 키보 드? u는 2 키보드가

//-----------------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 및 기타도 고려해야합니다.

키보드의 키를 다시 매핑하려는 경우 새 키보드 레이아웃을 만들어 로캘에 할당 할 수 있습니다.

키보드 레이아웃이 필요를 충족시키지 못하는 경우 키보드 장치 드라이버를 작성해야합니다.

특정 응용 프로그램에서만이 기능이 필요하면 (전세계 시스템이 아닌 경우) 운이 좋으면 창 메시지를 수정할 수 있습니다.