по этому адресу расположен небольшой туториал: http://netcode.ru/cpp/?lang=&katID=6&skatID=67&artID=2742, так вот переписал пример на фасм, но с перехватом нажатий мыши: Код (Text): format PE console 4.0 include 'c:\asma\fasm\INCLUDE\WIN32A.INC' section '.code' code readable writeable executable proc hook_prog nCode:DWORD, wParam:DWORD, lParam:DWORD invoke Beep,0xff,0xff ret endp entry $ invoke SetWindowsHookExA, WH_MOUSE, hook_prog, NULL, NULL invoke ExitProcess,0 section '.idata' import data readable writeable library kernel32, 'kernel32.dll',\ user32,'user32.dll' import kernel32,\ ExitProcess,'ExitProcess',\ Beep,'Beep' import user32,\ SetWindowsHookExA,'SetWindowsHookExA' Функция возвращает ERROR_HOOK_NEEDS_HMOD (00000594), непойму в чем загвоздка, в принципе аргументы удовлетворяют вызову функции: 3 параметр нулл, если обработчик находится в этом же процессе, и 4 перехват из всех потоков и процессов. ???
То есть обязательно нужно выносить обработчик в длл?, а нельзя сделать чтобы обработчик находился в контексте этого же процесса и плюс еще перехватывать от всех процессов?
vadak Конечно нельзя. Так как это рушет все концепции ... 1) Как будем подгружать код в другой процессы? (Ну или как будем делать нотификацию ?) 2) Контекст выполнения хука должен быть процесса который был похукан(а если еще точнее тот же поток) так как это бы разружелл привелегии и секурити. Вообще много факторов. Только ДЛЛ.
Канешн, много факторов. Только РТФМ, говорите открыто и смело в директивах конпелятору: 'глобальных хук!'