C++ sous Win : HOOK sans DLL

C++ sous Win : HOOK sans DLL - C++ - Programmation

Marsh Posté le 10-02-2005 à 21:38:42    

Bonjour,  
 
Après pas mal de recherches, j'ai découvert qu'il était possible de se passer d'une DLL pour executer du code lors du catching d'un evenement par un hook (l'utilisation de la dll etant le cas le plus général). Cependant je ne souhaite pas en utiliser une. J'ai donc trouver un bout de code sur la msdn qui intègre tout dans un seul exe. Le probleme est le suivant :
 
L'exécution de la callback attachée au hook ne se produit que lorsque j'ai la messagebox activé (cf le code). Or je veux que le programme n'aie aucune IHM (tourne en tache de fond).
J'envisage de mettre ensuite une boucle de traitement.
 
Ma question est :  
 
comment remédier à ce problème ?  
Est-on obligé de créer une fenetre pour pouvoir trapper les messages windows ? (je pense que non)  
La solution de facilité serait bien sur de mettre une fenetre invisible et de la masquer de la barre des taches mais ca n'est pas "propre".
 
ps : non je ne developpe pas un keylogger !  
 
 
voici le code en question, d'avance merci pour vos réponses (j'espere être compris)
 

Code :
  1. /******************************************************************************
  2. Module:  DisableLowLevelKeys.cpp
  3. Notices: Written 2000 Jeffrey Richter
  4. ******************************************************************************/
  5. #define _WIN32_WINNT 0x0400
  6. #include <Windows.h>
  7. ///////////////////////////////////////////////////////////////////////////////
  8. LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
  9.    WPARAM wParam, LPARAM lParam) {
  10.    BOOL fEatKeystroke = FALSE;
  11.    PKBDLLHOOKSTRUCT p=NULL;
  12.    if (nCode == HC_ACTION) {
  13.       switch (wParam) {
  14.       case WM_KEYDOWN:  case WM_SYSKEYDOWN:
  15.      
  16.   MessageBox(NULL,"Touche detectee","",MB_OK);
  17.  // traitement
  18.          break;
  19.   default :
  20.    break;
  21.       }
  22.    }
  23.    return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
  24. }
  25. ///////////////////////////////////////////////////////////////////////////////
  26. int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
  27. // Install the low-level keyboard & mouse hooks
  28.    HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc, hinstExe, 0);
  29.    // Keep this app running until we're told to stop
  30.    MessageBox(NULL,"Fenetre bloquante",NL, MB_OK);
  31.  
  32.    bool loop = true;
  33.    while(loop)
  34.    {
  35.         // traitement
  36.         _sleep(100);
  37.    }
  38.    UnhookWindowsHookEx(hhkLowLevelKybd);
  39.    return(0);
  40. }
  41. ///////////////////////////////// End Of File /////////////////////////////////


Message édité par PtitKiki le 10-02-2005 à 21:43:48
Reply

Marsh Posté le 10-02-2005 à 21:38:42   

Reply

Sujets relatifs:

Leave a Replay

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