Bonjour,
Je cherche désespérément à faire fonctionner un hook souris basique réalisé en C++. Le hook doit fonctionner sous Windows 7 64 bits, où on peut donc y rencontrer des applications 32 et 64 bits.
Après plusieurs recherches, il me faut donc en gros réaliser 2 hooks, un compilé en 32 bits pour les applications 32 bits, un autre compilé en 64 bits pour les applications 64 bits.
J'ai trouvé un bout de code me permettant de faire la distinction entre les applications 32 et 64 bits, mais mon problème est que je ne sais pas comment le mettre en place ...
Le code faisant cette distinction d'applis est le suivant :
Le code de ma DLL où est codé mon hook, tout ce qu'il y a de plus classique (il ne fait rien, c'est juste pour l'exemple) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 HWND hwnd; DWORD ProcID; HANDLE hProc; BOOL bWOW64Proc = FALSE; GetWindowThreadProcessId(hwnd, &ProcID); hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID); IsWow64Process(hProc, &bWOW64Proc); CloseHandle(hProc);
Quelqu'un saurait-il comment faire, ou plus généralement, comment réaliser un (ou 2) hook(s) souris fonctionnant sous Windows 7 64 bits ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <windows.h> #include <stdio.h> HANDLE MemPartagee; HINSTANCE thismod; HHOOK hhk; /** * Init DLL. */ extern "C" __declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved) { if(dwReason == DLL_PROCESS_ATTACH) { thismod = hDll; } return 1; } /** * Fonction hook. */ LRESULT CALLBACK wndProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { if (wParam == WM_LBUTTONDOWN) { // Traitements du hook ... } } return CallNextHookEx(hhk, nCode, wParam, lParam); } /** * Démarrage du hook. */ extern "C" __declspec(dllexport) int __stdcall Intercepte() { if(!hhk) { hhk = SetWindowsHookEx(WH_MOUSE, wndProc, thismod, 0); } return (int) hhk; } /** * Arrêt du hook. */ extern "C" __declspec(dllexport) void __stdcall Relache() { if(hhk) { UnhookWindowsHookEx(hhk); hhk = 0; } }
Merci par avance pour votre aide
Partager