thenaoh
Messages postés111Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention24 juin 2015
-
8 nov. 2010 à 18:02
thenaoh
Messages postés111Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention24 juin 2015
-
10 nov. 2010 à 10:49
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, j'ai vu qu'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 :
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201919 9 nov. 2010 à 18:54
Exemple sur Win7 x64 qui va impec.
Une DialogBox avec 2 boutons et 1 static pour info.
On lance le hook par le bouton, focus sur Chrome, VS ou autre prog 32 bits et la dialogBox se déplace bien en position 10,10 quand il faut.
Tout ça en 1 exe de 3.5 Ko.
thenaoh
Messages postés111Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention24 juin 2015 9 nov. 2010 à 11:53
Merci BruNews, je n'avais pas pensé à cette possibilité, en effet !
J'ai donc réalisé un hook sans DLL tout simple, en m'inspirant d'un exemple existant, mais qui non seulement ne détecte pas mes clics de souris, mais en plus rend le déplacement de mon curseur de souris particulièrement lent (bon cette fois j'ai testé sous XP). Voici le code :
#define _WIN32_WINNT 0x0400
#include <windows.h>
HHOOK hHook; // Handle du hook global
HINSTANCE hExe; // Handle de notre exécutable
// Fonction de gestion du hook
__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)
{
if ((nCode >0) && (wParam WM_LBUTTONDOWN))
{
MessageBox(NULL, "clic !", "Clic", MB_ICONINFORMATION);
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
// Fonction principale.
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nShow )
{
hExe = GetModuleHandle(NULL);
hHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC) HookProc, hExe, 0);
while(!(GetAsyncKeyState(VK_F8)))
{
Sleep(500);
}
UnhookWindowsHookEx(hHook);
return 0;
}
Le but de ce programme sera de m'écrire sur la sortie standard le mot "clic" (par exemple) dès que l'utilisateur clique avec le bouton gauche de sa souris. Ici je teste avec une MessageBox, mais elle ne s'affiche jamais.
J'ai beau chercher, je ne comprends pas d'où vient le problème. Une idée ?
thenaoh
Messages postés111Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention24 juin 2015 10 nov. 2010 à 10:49
Wha cool ! Merci beaucoup !!
Bon maintenant faut que ça cause sur la sortie standard et ne faire apparaître aucune fenêtre, m'enfin je devrais y arriver.
Merci !