[c++] HOOK - monitorowanie plików

0

Witam

Mam kawałek kodu:

LRESULT CALLBACK SysMsgProc( int code, WPARAM wParam, LPARAM lParam )
{
  CallNextHookEx( SysHook, code, wParam, lParam );

 if( code == HCBT_CREATEWND )
 {

      Wnd = ( (tagMSG*)lParam)->hwnd;
      if(!Wnd) Beep(600, 90);

      if(!GetWindowText(Wnd, text, 255))Beep(200, 90);
 }

 return 0;
}

SysHook = SetWindowsHookEx( WH_CBT, (HOOKPROC)&SysMsgProc, hInst, 0 );I pojawia się pytanie dlaczego GetWindowText zwraca false? i dlaczego gdy zrobieif(Wnd) Beep(600, 90);i uruchomię np notatnik to głośniczek sytemowy wydaje dużo dziwękiów a nie tylko jeden. Funkcja GetWindowText ciągle zwraca false, a uchwyt true. Nie wiecie może co tu jest źle. Dodam że przykład jest z książki, trochę go zmieniłem (Beep)

0

dla tego hooka i dla tego kodu - wParam to handle okna, a lParam to pointer do struct CBT_CREATEWND.

Staraj się omijać GetWindowText bo zadziała tylko dla okna w którym Twój dll już jest załadowany, system tworząc okno, a nawet uruchamiając proces - tworzy sobie kilka ukrytych okien (np. DDE) i dlatego jest ich tyle :)
Włącz SPY++ i sprawdź sam.

Zaprzyjaźnij się z WM_GETTEXT, a GetWindowText sprzedaj za beczkę piwa

0

W tym przypadku to niestety nie działa.

0

Nie wiem czy to jest źle i nie mam za bardzo czasu sprawdzać ale zwykle hooka robiłem w ten sposób i działał dobrze:

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){
   
  ..........
  
return ( CallNextHookEx(hook,nCode,wParam,lParam) );           
}

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1