ХУКИ - ловушка для оконных сообщений

Тема в разделе "LANGS.C", создана пользователем denisznu, 18 май 2009.

  1. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Всем привет, нуждаюсь в вашей помощи, проблема такова:
    Мне необходимо перехватывать оконные сообщения и записывать их в файл. У меня есть программа для перехвата нажатия клавиш, работает она корректно.
    Я пытался изменить ее под себя, и для этого поменял параметр в SetWindowsHookEx с обработчика нажатия клавишь на WH_CALLWNDPROC.
    В результате в лог-файле у меня везде код равен нулю - nCode=0 wParam=00000000;
    Помогите пожалуйсто и подскажите в чем ошибка, код кидаю ниже. Всем заранее спасибо.

    ДЛЛ БИБЛИОТЕКА, С ФУНКЦИЕЙ ОБРАБОТКИ
    Код (Text):
    1. //--------------------------
    2. #include <windows.h>
    3. #include <stdio.h>
    4. #pragma hdrstop
    5. //--------------------------
    6. // Объявляем функцию для того, чтобы основная прога могла её поюзать из DLL
    7. extern "C" __declspec(dllexport) LRESULT CALLBACK
    8. KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
    9. //--------------------------
    10. // "Шпионская" функция
    11. //--------------------------
    12. LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
    13. {
    14. FILE *f; // Указатель на файл
    15.  
    16. // Открываем файл с логом на добавление, если его нет - создаём
    17. if((f=fopen("c:\\logfile.txt","a"))!=NULL)
    18. {
    19.  
    20.     fprintf(f,"nCode=%d wParam=%p\n", code,wParam);
    21. fclose(f);
    22. }
    23.  
    24. return CallNextHookEx(NULL, code, wParam, lParam);
    25. }
    26. //--------------------------
    27. // Функция входа в DLL - её не оставляем как есть
    28. //--------------------------
    29. int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    30. {
    31. return 1;
    32. }
    33. //--------------------------
    И главная программа:

    Код (Text):
    1. #include <vcl.h>
    2. #include <condefs.h>
    3. #include <winuser.h>
    4. #include <winbase.h>
    5. #include <stdio.h>
    6. //---------------------------------------------------------------------------
    7. HHOOK hook; // Handle íàøåé "øïèîíñêîé" ôóíêöèè
    8. //---------------------------------------------------------------------------
    9. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    10. {
    11.  
    12. typedef int (CALLBACK* lpfn)();
    13. lpfn hookfunc;
    14.  
    15. HINSTANCE hDLL=LoadLibrary("hookdll.dll");
    16.  
    17. hookfunc=(lpfn)GetProcAddress(hDLL,"KeyboardProc");
    18.  
    19. hook=SetWindowsHookEx(WH_CALLWNDPROC,
    20. hookfunc,
    21. LoadLibrary("hookdll.dll"),
    22. 0 );
    23.  
    24. while(1) {};
    25. }
    26. //--------------------------