Перехват WinAPI функции MessageBox

Тема в разделе "WASM.WIN32", создана пользователем __ARTEM__, 10 сен 2006.

  1. __ARTEM__

    __ARTEM__ New Member

    Публикаций:
    0
    Хочу поставить хук на вызов вункции MessageBoxA(W), не только в своём приложении, а во всех. Тоесть когда будет вызываться функция например в блокноте, то в моей проге выводилось в консоль инфа которая говорит что произошел вызов MessageBoxA(W).
     
  2. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    wasm.ru тебе в помощь, сынок!
     
  3. Klajnor_666

    Klajnor_666 New Member

    Публикаций:
    0
  4. __ARTEM__

    __ARTEM__ New Member

    Публикаций:
    0
    Да я читал эти статьи, но там там на паскале:-( мож кто - нить подкинет статьи на сях!
     
  5. MegaZu

    MegaZu New Member

    Публикаций:
    0
    А что есть принципиальная разница ? Перевести эти сурсы на С - 15 мин.
    ЗЫ. Может топик надо было назвать "дайте мне исходники готовой программы" ?
     
  6. __ARTEM__

    __ARTEM__ New Member

    Публикаций:
    0
    Да я одного понять не могу почему когда я вызываю функцию SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MsgProc, 0, GetCurrentThreadId());, с параметром GetCurrentThreadId(), она вылавливает месседжбоксы только из того потока в котором обьявлена, а если я ставлю последний параметр 0 она должна же отслеживать все потоки, так ведь? А не ловит!
     
  7. tmp_name_0001

    tmp_name_0001 New Member

    Публикаций:
    0
    SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)&MessageProc,(HINSTANCE)hHandle,0);

    hHandle это хэндл модуля
     
  8. __ARTEM__

    __ARTEM__ New Member

    Публикаций:
    0
    А если у меня нет модуля, эта функция в том модуле где и SetWindowsHookEx(...), знач NULL должно быть, так?
     
  9. tmp_name_0001

    tmp_name_0001 New Member

    Публикаций:
    0
    нет не так ... у тебя же последний параметр 0 ... нужен хэндл твоей длл-ки получай его GetModuleHandle или
    возьми его хотябы в твоей стартовой функции

    к примеру она такая

    Код (Text):
    1.  
    2. BOOLEAN
    3. WINAPI
    4. DllMain(
    5.     IN HINSTANCE hDllHandle,
    6.     IN DWORD     nReason,    
    7.     IN LPVOID    Reserved    
    8. )
    вот этот хэндл и ложи в SetWindowsHookEx
     
  10. __ARTEM__

    __ARTEM__ New Member

    Публикаций:
    0
    Огромное спасибо всем за то что просветили! Кстате всех с Днем Программера :derisive:
     
  11. DJK

    DJK Member

    Публикаций:
    0
    Попробуй эти исходники, правда иногда DLL не выгружается, а так работают.
     
  12. Freecod

    Freecod New Member

    Публикаций:
    0
    Может кто-нибудь внятно объяснить или дать ссылку на статью, как, в конце концов перехватить API без идиотских jmp в начале функции и извращений с импортом, а вполне стандартным SetWindowsHookEx?
    Всё, что есть в статье на wasm'e "От зеленого к красному: Глава 3: Программирование в Shell-код стиле. Важные техники системного программирования: SEH, VEH и API Hooking" - << Чтобы глобально перехватывать функции можно использовать функцию SetWindowsHook. Тогда мы будет перехватывать нужную функцию во всех текущих GUI-приложениях, а также новых, т.к. если мы вызываем функцию SetWindowsHook, то она внедряет DLL и для всех новых процессов.>> Всё.
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Могу ебе сразу ответить - никак.
    SetWindowsHookEx не предназначен для перехвата API, хотя его зачастую используют как средство загрузки DLL в адресное пространство целевого процесса.