вам нужно использовать подключаемые процедуры (глобальные: вся система; или локальные: отдельная программа или поток).
По сути, вы будете вызывать следующие процедуры:
- Функция SetWindowsHookEx: для установки перехвата (отслеживания системного события)
- Функция перехвата: процедура, вызываемая окнами, когда происходит событие, которое мы «перехватываем».
- Функция UnhookWindowsHookEx: убрать ваш хук
Вот простой пример локальной клавиатуры, контролирующей записи клавиатуры:
//setting up the hook;
//kbHook is a variable of type HHook (unit Windows);
//kbr_Hook is the procedure that will be called once the event happens;
kbHook:=setwindowshookex(WH_KEYBOARD,@kbr_Hook,0,GetCurrentThreadID());
Документация MSDN: http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx
удачи