Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2523 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Hook Clavier + Pavé numérique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Hook Clavier + Pavé numérique

n°2133208
delirium6
Posté le 27-03-2012 à 12:51:39  profilanswer
 

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 :
  1. //-----------------Keyboard Hook Callback---------------//
  2. function MsgHook(hCode,wParam:LongInt;lParam:LongInt):Longint;stdcall;
  3. var
  4. p : pMsg;
  5. oldVK,newVK : word;
  6. oldSC,newSC : word;
  7. extendkey : boolean;
  8. modif : boolean;
  9. begin
  10. if (hCode>=0) then
  11.    begin
  12.    p:=pmsg(lparam);
  13.    if (p^.message=wm_KeyDown) or (p^.message=wm_KeyUp) then
  14.       begin
  15.       oldVK:=p^.wparam;
  16.  oldSC:=hiword(p^.lparam) and $00FF;
  17.  extendkey:=((hiword(p^.lparam) and $0100)=$0100);
  18.       if not extendkey then
  19.     begin 
  20. ShowMessage('Hello world from a Delphi DLL');
  21.     modif:=true;
  22.   case oldVK of
  23.       VK_NUMPAD7   : newVK:=VK_NUMPAD7;
  24.        VK_UP     : newVK:=VK_NUMPAD8;
  25.         VK_PRIOR  : newVK:=VK_NUMPAD9;
  26.        VK_LEFT   : newVK:=VK_NUMPAD4;
  27.         VK_CLEAR  : newVK:=VK_NUMPAD5;
  28.        VK_RIGHT  : newVK:=VK_NUMPAD6;
  29.         VK_END  : newVK:=VK_NUMPAD1;
  30.        VK_DOWN  : newVK:=VK_NUMPAD2;
  31.        VK_NEXT  : newVK:=VK_NUMPAD3;
  32.         VK_INSERT : newVK:=VK_NUMPAD0;
  33.        VK_DELETE : newVK:=VK_DECIMAL;
  34.         else modif:=false;
  35.             end;
  36.   if modif then
  37.           begin
  38.             p^.wparam:=newVK;
  39.             newSC:=MapVirtualKey(newVK,0);
  40.             p^.lParam:=p^.lParam and $FF00FFFF or (newSC shl 32  );
  41.             end;
  42.     end;
  43.       end;
  44.    end;
  45. Result:=CallNextHookEx(MyData.hHookMsg,hCode,wParam,lParam);
  46. end;


 
Et voici la mienne en C++ mais encre en debug et mode je comprend pas !
 

Code :
  1. Hookmsg_API LRESULT CALLBACK Hookmsg(int ncode,WPARAM wparam,LPARAM lparam){
  2. //if(ncode>=0) //
  3. if(ncode<0)
  4.  return CallNextHookEx(hook,ncode,wparam,lparam);
  5. MSG *msg;
  6. msg=(MSG *)lparam;
  7. WORD newVK;
  8. WORD newSC;
  9. if(ncode==HC_ACTION)
  10. {
  11.  if((msg->message == WM_KEYUP))//Check whether key was pressed(not released).
  12.  //if (!(lparam & 0x70000000))
  13.  //if (lparam & (1 << 31))
  14.  {
  15.   WORD oldVK=msg->wParam;
  16.   WORD oldSC=HIWORD(msg->wParam) & 0x00FF;
  17.   bool extendkey=false;
  18.   if(((HIWORD(msg->wParam) & 0x0100) == 0x0100))
  19.   {
  20.    extendkey=true;
  21.   }
  22.   if(!extendkey)
  23.   {
  24.    bool modif=true;
  25.    switch(oldVK)//wparam
  26.    {
  27.     /*case VK_INSERT: MessageBox( NULL, TEXT("VK_INSERT" ), TEXT("Error!" ), MB_OK);break;
  28.     case VK_END: MessageBox( NULL, TEXT("VK_END" ), TEXT("Error!" ), MB_OK);break;
  29.     case VK_DOWN: MessageBox( NULL, TEXT("VK_DOWN" ), TEXT("Error!" ), MB_OK);break;
  30.     case VK_NEXT: MessageBox( NULL, TEXT("VK_NEXT" ), TEXT("Error!" ), MB_OK);break;
  31.     case VK_LEFT: MessageBox( NULL, TEXT("VK_LEFT" ), TEXT("Error!" ), MB_OK);break;
  32.     case VK_CLEAR: MessageBox( NULL, TEXT("VK_CLEAR" ), TEXT("Error!" ), MB_OK);break;
  33.     case VK_RIGHT: MessageBox( NULL, TEXT("VK_RIGHT" ), TEXT("Error!" ), MB_OK);break;
  34.     case VK_HOME: MessageBox( NULL, TEXT("VK_HOME" ), TEXT("Error!" ), MB_OK);break;
  35.     case VK_UP: MessageBox( NULL, TEXT("VK_UP" ), TEXT("Error!" ), MB_OK);break;
  36.     case VK_PRIOR: MessageBox( NULL, TEXT("VK_PRIOR" ), TEXT("Error!" ), MB_OK);break;
  37.     case VK_DELETE: MessageBox( NULL, TEXT("VK_DELETE" ), TEXT("Error!" ), MB_OK);break;*/
  38.     case VK_INSERT: newVK=VK_NUMPAD0; break;
  39.     case VK_END: newVK=VK_NUMPAD1; break;
  40.     case VK_DOWN: newVK=VK_NUMPAD2; break;
  41.     case VK_NEXT: newVK=VK_NUMPAD3; break;
  42.     case VK_LEFT: newVK=VK_NUMPAD4; break;
  43.     case VK_CLEAR: newVK=VK_NUMPAD5; break;
  44.     case VK_RIGHT: newVK=VK_NUMPAD6; break;
  45.     case VK_HOME: newVK=VK_NUMPAD7; break;
  46.     case VK_UP: newVK=VK_NUMPAD8; break;
  47.     case VK_PRIOR: newVK=VK_NUMPAD9; break;
  48.     case VK_DELETE: newVK=VK_DECIMAL; break;
  49.     default: modif=false;
  50.    }
  51.    if(modif==true)
  52.    {
  53.     newSC=MapVirtualKey(newVK,MAPVK_VK_TO_VSC);
  54.     msg->lParam &= 0xFF00FFFF;
  55.     msg->lParam += (newSC >> 16 );
  56.     MessageBox( NULL, TEXT("OK" ), TEXT("Error!" ), MB_OK);
  57.    }
  58.   }
  59.  }
  60. }
  61. return ( CallNextHookEx(hook,ncode,wparam,lparam) );//pass control to next hook in the hook chain.
  62. }


 
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.

mood
Publicité
Posté le 27-03-2012 à 12:51:39  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Hook Clavier + Pavé numérique

 

Sujets relatifs
Batch trie numérique[C]Comment récupérer une saisie clavier ?
[Bash] comment terrompre une boucle par une saisie au clavier.créer un clavier numérique sous excel
[demande] envoi automatique de produit numeriqueFlèches du clavier et jeu flash dans site PHP
[??] Simulation numérique de problèmes physiqueprogramme pour les touches clavier
Code touche clavier Flèche aut - Repérage lignes visibles non filtrée 
Plus de sujets relatifs à : Hook Clavier + Pavé numérique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR