1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| Library SourisHook;
//----------------------------------------------------------------------------//
// Surveillance des évenements de la souris //
// Source initiale --> http://www.q3.nu/trucomania/truco.cgi?415&ing //
// Après un peu plus de compréhension du fonctionnement d'un Hook //
// Traduite en français //
//----------------------------------------------------------------------------//
uses
Windows,
Messages;
Const SURVEILLE_CALENDRIER = WM_USER + $1000;
// Définition d'un buffer de stockage des évenements souris
Type
TDonneesSouris = Record
ProgrammeRecepteur, // Handle du programme récepteur
wHitTestCode, // WM_NCHITTEST -> Message envoyé à windows quand la souris est en mouvement
// une Valeur est retournée en fonction de l'endroit
// ou se trouve la souris sur une fenêtre
// (Ex : Bouton fermeture d'une fenêtre = 20 -->HTCLOSE
// les valeurs retournées sont HTBORDER HTBOTTOM HTCAPTION ETC....
// Voir WM_NCHITTEST dans l'aide
x,y, // Position de la souris
HandleSurvole : hwnd; // Handle de la fenêtre survolée captée dans les évènements de la souris
End;
PDonneesSouris =^TDonneesSouris;
Var
HookDeLaSouris : HHook; // Type LongWord dans windows.pas
FichierMemoire : THandle;
DonneesSouris : PDonneesSouris ;
// C'est la fonction appelé par le hook de la souris
Function CallBackDelHook( Code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; StdCall;
Var
// Structure qui contient les informations des évenements de la souris dans Windows.Pas
// Utilisée par WH_MOUSE
// typedef struct tagMOUSEHOOKSTRUCT { // ms
// POINT pt;
// HWND hwnd;
// UINT wHitTestCode;
// DWORD dwExtraInfo;
// }MOUSEHOOKSTRUCT;
EvenementsSouris : PMouseHookStruct;
Begin
// Si il y a un nouvel événement de la souris...
If Code = HC_ACTION Then
Begin
// Si le fichier mémoire existe
FichierMemoire := OpenFileMapping(FILE_MAP_WRITE,False,'Calendrier Recepteur');
//Si c'est pas le cas l'application ne peut pas recevoir de message
If FichierMemoire <> 0 Then
Begin
// Création d'une vue pour pouvoir accéder à la zone de mémoire partagée
DonneesSouris := MapViewOfFile(FichierMemoire,FILE_MAP_WRITE,0,0,0);
If DonneesSouris <> Nil Then
Begin
// On ajoute les évenements dans la file
EvenementsSouris := Pointer(lparam);
// On garde les infos en mémoire
DonneesSouris^.HandleSurvole := EvenementsSouris^.hwnd;
DonneesSouris^.x := EvenementsSouris^.pt.x;
DonneesSouris^.y := EvenementsSouris^.pt.y;
DonneesSouris^.wHitTestCode := EvenementsSouris^.wHitTestCode;
// Informer qu'il y a un nouvel évenement de la souris
// wParam contient le type de message (WM_LBUTTONDOWN à WM_MOUSEWHEEL)
// lParam contient un pointeur sur une structure MOUSEHOOKSTRUCT
PostMessage(DonneesSouris^.ProgrammeRecepteur,SURVEILLE_CALENDRIER,wParam,lParam);
// Destruction de la vue sur la zone de mémoire partagée
UnmapViewOfFile(DonneesSouris);
End;
// Détachement de la zone de mémoire partagée
CloseHandle(FichierMemoire);
End;
End;
// Faire suivre le message
Result := CallNextHookEx(HookDeLaSouris, Code, wParam, lParam)
End;
//----------------------------------------------------------------------------//
// Activer le Hook //
//----------------------------------------------------------------------------//
Procedure HookSourisActif; StdCall;
//Procedure pour installer le hook
Begin
// WH_MOUSE pour intercepter tous les messages de Type "Souris"
// de (WM_LBUTTONDOWN à WM_MOUSEWHEEL)
// Utilisation de la fonction CallBackdelHook
HookDeLaSouris := SetWindowsHookEx(WH_MOUSE, @CallBackDelHook, HInstance , 0);
End;
//----------------------------------------------------------------------------//
// Arrêter le Hook //
//----------------------------------------------------------------------------//
Procedure HookSourisInactif; StdCall;
Begin
//Procedure pour désintaller le Hook
//UnhookWindowsHookEx enleve la procédure installée par SetWindowsHookEx
UnhookWindowsHookEx(HookDeLaSouris);
End;
Exports
//Exporter les procédures
HookSourisActif,
HookSourisInactif;
Begin
End. |
Partager