Hook clavier

Hook clavier - C++ - Programmation

Marsh Posté le 25-06-2004 à 00:51:35    

Bonjour, j'ai fait un hook clavier en c++ grace au fonction  

Code :
  1. SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,DllInstance,0);


et

Code :
  1. CallNextHookEx(HookHandle,code,wParam,lParam);


qui fonctionne presque parfaitement : lapui sur nimporte quelle touche est detecté. Malheuresement losrqu'on laisse fonctionner le programme en arriere plan, et qu'on souhaite lancer Steam, un jeux video, ou certain programme, ces dernier plante et fon parfoi redemarrer lordinateur. Se probleme n'apparait plus lorsque le hook est desactiver?
Savai vous ou ce situe le pb, et comment le resoudre?
merci d'avance
Myke

Reply

Marsh Posté le 25-06-2004 à 00:51:35   

Reply

Marsh Posté le 25-06-2004 à 02:07:59    

poste le code de KeyProc !!!

Reply

Marsh Posté le 25-06-2004 à 08:14:49    

(c'est du C pour l'instant)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 25-06-2004 à 09:14:21    

pourquoi faire un hook pour une touche clavier ? Utilise plutot la fonction RegisterHotKey()


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-06-2004 à 12:05:38    

voila le codse tou simple de KeyProc :  
 

Code :
  1. LRESULT CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
  2. {
  3.   if (! ((DWORD)lParam & 0x40000000)  ){
  4.   hwnd = FindWindow(NULL,"HitKey" );
  5.   PostMessage(hwnd,WM_USER+755,wParam,lParam);}
  6. return CallNextHookEx(HookHandle,code,wParam,lParam);
  7. }


 
En fait le but de ce programme est de compter le nombre de touche au total enfoncer par lutilisateur, sous nimporte quelle programme.
 
Merci pour vos reponse
Myke

Reply

Marsh Posté le 25-06-2004 à 12:17:04    

myke38 a écrit :


En fait le but de ce programme est de compter le nombre de touche au total enfoncer par lutilisateur, sous nimporte quelle programme.


Dans ce cas, pas besoin d'un hook ! Un simple compteur dans le WM_KEYDOWN fera largement l'affaire


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-06-2004 à 13:04:32    

non car g presiser que le programme devai compter toutes les touche enfoncer, meme lorsque l'utilisateur ecri sur msn ou joue a counter strike.
 
sinon g essayer RegisterHotKey() : 3 questions me vienne a lesprit :  
1) comment faire pour que la touche ne soi pas inactive dans les autre programme : exemple si je defini le 'A' comme HotKey, je ne peu plus ecrire de 'a' sur msn messager ou le forum.
2) comment faire pour que toutes les touche face apelle a ma fonction defini dans RegisterHotKey, et pas seulement une seule touche?
3) existe t il une fonction analogue pour la souris?  
 
Merci pour tou
Myke

Reply

Marsh Posté le 25-06-2004 à 13:05:36    

Tu serais pas en train de vouloir coder un keylogger quand meme  :non:

Reply

Marsh Posté le 25-06-2004 à 13:34:51    

ton ((DWORD)lParam & 0x40000000....
 
ce serait pas pour tester si la valeur est inférieure à 0 ?
 
http://msdn.microsoft.com/library/ [...] rdProc.asp
 
si c'est ça c'est 0x80000000 qui permet de tester le bit de poids fort.
 
////////
 
Autant pour moi il semble que c'est pas ce que tu sohaites faire....

Reply

Marsh Posté le 25-06-2004 à 14:28:52    

non mais c gentil de vouloir maider : en faite le plus fort c que si je change ma dll en  :  

Code :
  1. //---------------------------------------------------------------------#include <vcl.h>
  2. #pragma hdrstop
  3. #include <vcl\Registry.hpp>
  4. #include <dir.h>
  5. //---------------------------------------------------------------------
  6. extern "C" __declspec(dllexport)bool InstallMouseHook();
  7. extern "C" __declspec(dllexport)bool RemoveMouseHook();
  8. LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam);
  9. LRESULT CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam);
  10. HHOOK HookHandle;
  11. HHOOK HookHandle1;
  12. HINSTANCE DllInstance;
  13. HWND hwnd = NULL;
  14. HWND hwnd1 = NULL;
  15. //---------------------------------------------------------------------
  16. int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
  17. {
  18. DllInstance=hinst;
  19. return 1;
  20. }
  21. //---------------------------------------------------------------------
  22. bool InstallMouseHook()
  23. {
  24.   HookHandle1=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,DllInstance,0);
  25. HookHandle=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,DllInstance,0);
  26.   if (HookHandle1==NULL || HookHandle==NULL)return false;
  27.   else return true;
  28. }
  29. //---------------------------------------------------------------------
  30. bool RemoveMouseHook()
  31. {
  32.   if(UnhookWindowsHookEx(HookHandle)==0 ||UnhookWindowsHookEx(HookHandle1)==0)return false;
  33.   else return true;
  34. }
  35. //---------------------------------------------------------------------
  36. LRESULT CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
  37. {
  38. return CallNextHookEx(HookHandle,code,wParam,lParam);
  39. }
  40. //---------------------------------------------------------------------
  41. LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam)
  42. {
  43. return CallNextHookEx(HookHandle1,code,wParam,lParam);
  44. }
  45. //---------------------------------------------------------------------


 
 
ben sa plante encore certain programme lorsque celui ci tourne en arriere plan.
Compren pas:(

Reply

Marsh Posté le 25-06-2004 à 14:28:52   

Reply

Marsh Posté le 25-06-2004 à 14:37:47    

http://msdn.microsoft.com/library/ [...] HookEx.asp
 
fait plustôt:
CallNextHookEx( NULL, code ....
pour voir...

Reply

Marsh Posté le 25-06-2004 à 14:46:26    

Merci bien mai sa marche toujours pas :  

Code :
  1. return CallNextHookEx(NULL,code,wParam,lParam);


Sa plante toujours:(

Reply

Marsh Posté le 25-06-2004 à 17:35:23    

ça sent le keylogger ton truc [:heink]

Reply

Marsh Posté le 25-06-2004 à 22:45:07    

c'est plus ou moin sa, mai sa marche touours pas:(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed