Hook clavier [Résolu]

T103 177 Messages postés lundi 11 août 2003Date d'inscription 21 avril 2010 Dernière intervention - 27 nov. 2006 à 17:53 - Dernière réponse : T103 177 Messages postés lundi 11 août 2003Date d'inscription 21 avril 2010 Dernière intervention
- 27 nov. 2006 à 18:23
Bonsoir a tous, voila j'essaye de comprendre le fonctionnement des hooks, jai trouver plusieurs source sur le net pour apprendre a recupérer les touches du clavier.
Je vais vous montrer le code source de ma DLL, mon programme compte juste le nbr de fois ou j'appui sur la touche entrée, mais le problème cest qu'il me compte 1 fois quand j'appui et 1 fois encore quand la touche est relachée. Comment faut il fair pour que le programme ne puisse compter que lorsque la touche est appuyée ? Merci pour vos conseils et aide, je vous donne la source de la DLL :

library dll;

uses
  SysUtils,
  Windows,
  Messages;

type
  TDonnees= record
     keybdHookHandle:HHook; {Handle du Hook retourné par SetWindowsHookEx}
     hDestWindow : HWND; // Handle de la fenêtre à laquelle le hook du clavier doit les données
  end;
  PDonnees = ^TDonnees;

  const
  WMAP_KEYBDHOOKMSG = WM_APP+1 ;

var
   memPartagee : Cardinal;//Handle de la zone de mémoire partagée
   VueDonnees : PDonnees;//Pointeur vers la zone de mémoire

function HookActionCallBack(nCode: integer; Wparam : WPARAM; Lparam: LPARAM):integer; stdcall;
{cette fonction reçoit tous les messages détournés                                            }
{elle envoit en retour un message avec les renseignements vers la fenêtre de handle HandleDest}
begin
  if (wParam = VK_RETURN) then
    PostMessage(VueDonnees^.hDestWindow, WMAP_KEYBDHOOKMSG, 0, 0);
  Result:=CallNextHookEx(VueDonnees^.keybdHookHandle,nCode,Wparam,Lparam);
end;

procedure InitHook(hDest:HWND)stdcall; export;
{SetWindowsHookEx permet de donner à windows le nom de la fonction qui sera }
{exécutée à chaque fois qu'il reçoit un message de type WH_KEYBOARD            }
begin
  if (VueDonnees^.keybdHookHandle=0) and (hDest<>0) then begin
    VueDonnees^.keybdHookHandle:=SetWindowsHookEx(WH_KEYBOARD,HookActionCallBack,HInstance,0);
    VueDonnees^.hDestWindow := hDest;
  end;
end;

procedure EndHook() stdcall; export;
begin
  if VueDonnees^.keybdHookHandle<>0 then begin
    UnhookWindowsHookEx(VueDonnees.keybdHookHandle);
    VueDonnees^.keybdHookHandle :=0;
  end;
end;

procedure LibraryProc(AReason:Integer)stdcall;export;
begin
  case AReason of
    DLL_PROCESS_ATTACH:begin
      {Il faut d'abord créer le FileMapping}
      {le $FFFFFFFF indique seulement que ce n'est pas un fichier qui sera mappé, mais des données}
      {TDonneesHook.InstanceSize permet de donner à Windows la bonne taille de mémoire à réserver}
      memPartagee:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,sizeof(TDonnees),'Exile');
      {Ensuite faire un View sur tout le fichier}
      VueDonnees:=MapViewOfFile(memPartagee,FILE_MAP_WRITE,0,0,0);
    end;
    DLL_PROCESS_DETACH:begin //libérer les ressources prisent par notre FileMapping
      UnMapViewOfFile(VueDonnees);
      CloseHandle(memPartagee);
    end;
    DLL_THREAD_ATTACH:;
    DLL_THREAD_DETACH:;
  end;
end;

exports
  InitHook,
  EndHook;

begin
  DllProc:=@LibraryProc;
  LibraryProc(DLL_PROCESS_ATTACH);
end.
Afficher la suite 

Votre réponse

2 réponses

Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 27 nov. 2006 à 18:20
+3
Utile
Salut,

Regarde ceci :
http://www.delphifr.com/codes/KEY-LOGGER-SIMPLE-PARTIR-HOOKS-WINDOWS_12099.aspx

 
@+
Cirec

<hr size="2" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
T103 177 Messages postés lundi 11 août 2003Date d'inscription 21 avril 2010 Dernière intervention - 27 nov. 2006 à 18:23
0
Utile
Yes merci beaucoup, avec sa je vais pouvoir me debrouiller :), merci encore et bonne soirée
Commenter la réponse de T103

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.