delirium6 | Bonjour,
Après achat de ce mini clavier http://www.mobilitylab.eu/mini-des [...] ilver.html de 107 touches,
je voulais un pavé numérique pour le positionner du coté gauche du clavier.
Hors en activant le numlock du pavé numérique cela m'active aussi celui du mini clavier ainsi au lieu d'avoir les lettres uiop j'ai 456-.
J'ai trouvé ce programme la :
http://www.bellamyjc.org/fr/systeme.html#knumlock
Mais il ne fonctionne que sur un OS 32bits, et je suis sous Seven 64bits et je me suis donc lancé dans la ré-écriture de ce programme en C++.
Mais je suis confronté au problème suivant :
Je ne comprend pas comme il fait dans son programme pour différencier si les frappes viennes du pavé numérique ou du clavier.
Voici sa fonction en delphi :
Code :
- //-----------------Keyboard Hook Callback---------------//
- function MsgHook(hCode,wParam:LongInt;lParam:LongInt):Longint;stdcall;
- var
- p : pMsg;
- oldVK,newVK : word;
- oldSC,newSC : word;
- extendkey : boolean;
- modif : boolean;
- begin
- if (hCode>=0) then
- begin
- p:=pmsg(lparam);
- if (p^.message=wm_KeyDown) or (p^.message=wm_KeyUp) then
- begin
- oldVK:=p^.wparam;
- oldSC:=hiword(p^.lparam) and $00FF;
- extendkey:=((hiword(p^.lparam) and $0100)=$0100);
- if not extendkey then
- begin
- ShowMessage('Hello world from a Delphi DLL');
- modif:=true;
- case oldVK of
- VK_NUMPAD7 : newVK:=VK_NUMPAD7;
- VK_UP : newVK:=VK_NUMPAD8;
- VK_PRIOR : newVK:=VK_NUMPAD9;
- VK_LEFT : newVK:=VK_NUMPAD4;
- VK_CLEAR : newVK:=VK_NUMPAD5;
- VK_RIGHT : newVK:=VK_NUMPAD6;
- VK_END : newVK:=VK_NUMPAD1;
- VK_DOWN : newVK:=VK_NUMPAD2;
- VK_NEXT : newVK:=VK_NUMPAD3;
- VK_INSERT : newVK:=VK_NUMPAD0;
- VK_DELETE : newVK:=VK_DECIMAL;
- else modif:=false;
- end;
- if modif then
- begin
- p^.wparam:=newVK;
- newSC:=MapVirtualKey(newVK,0);
- p^.lParam:=p^.lParam and $FF00FFFF or (newSC shl 32 );
- end;
- end;
- end;
- end;
- Result:=CallNextHookEx(MyData.hHookMsg,hCode,wParam,lParam);
- end;
|
Et voici la mienne en C++ mais encre en debug et mode je comprend pas !
Code :
- 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;
- WORD newSC;
- if(ncode==HC_ACTION)
- {
- if((msg->message == WM_KEYUP))//Check whether key was pressed(not released).
- //if (!(lparam & 0x70000000))
- //if (lparam & (1 << 31))
- {
- WORD oldVK=msg->wParam;
- WORD oldSC=HIWORD(msg->wParam) & 0x00FF;
- bool extendkey=false;
- if(((HIWORD(msg->wParam) & 0x0100) == 0x0100))
- {
- extendkey=true;
- }
- if(!extendkey)
- {
- bool modif=true;
- switch(oldVK)//wparam
- {
- /*case VK_INSERT: MessageBox( NULL, TEXT("VK_INSERT" ), TEXT("Error!" ), MB_OK);break;
- case VK_END: MessageBox( NULL, TEXT("VK_END" ), TEXT("Error!" ), MB_OK);break;
- case VK_DOWN: MessageBox( NULL, TEXT("VK_DOWN" ), TEXT("Error!" ), MB_OK);break;
- case VK_NEXT: MessageBox( NULL, TEXT("VK_NEXT" ), TEXT("Error!" ), MB_OK);break;
- case VK_LEFT: MessageBox( NULL, TEXT("VK_LEFT" ), TEXT("Error!" ), MB_OK);break;
- case VK_CLEAR: MessageBox( NULL, TEXT("VK_CLEAR" ), TEXT("Error!" ), MB_OK);break;
- case VK_RIGHT: MessageBox( NULL, TEXT("VK_RIGHT" ), TEXT("Error!" ), MB_OK);break;
- case VK_HOME: MessageBox( NULL, TEXT("VK_HOME" ), TEXT("Error!" ), MB_OK);break;
- case VK_UP: MessageBox( NULL, TEXT("VK_UP" ), TEXT("Error!" ), MB_OK);break;
- case VK_PRIOR: MessageBox( NULL, TEXT("VK_PRIOR" ), TEXT("Error!" ), MB_OK);break;
- case VK_DELETE: MessageBox( NULL, TEXT("VK_DELETE" ), TEXT("Error!" ), MB_OK);break;*/
- 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)
- {
- newSC=MapVirtualKey(newVK,MAPVK_VK_TO_VSC);
- msg->lParam &= 0xFF00FFFF;
- 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.
- }
|
De plus je n'arrive pas à mapper la frappe qui doit remplacer l’ancienne ainsi que ce bout de code là.
p^.wparam:=newVK;
newSC:=MapVirtualKey(newVK,0);
p^.lParam:=p^.lParam and $FF00FFFF or (newSC shl 16 );
Ainsi, je viens rechercher un peu d'aide pour m'aider à finaliser mon programme.
Merci d'avance. |