тебе нужно копать SetWindowsHook, SetWindowsHookEx (грубо, очень грубо говоря - это виндовый аналог старых добрых TSR
т.е. хуки вешаются практически на любые виды происходящий в винде событий. в частности, можно повесить хук на все сообщения. все эти хуки представляют собой очередь. когда генерится сообщение, оно отправляется в очередь хуков, это сообщение перехватывающих, причём хук, повешенный последним в очереди будет первым, что даёт возможность блокировать всю последующую обработку сообщения (именно так реализуется блокировка мыши и клав в компьютерных клубах). после того, как отработает очередь хуков, многострадальное сообщение, наконец, отправляется в окно,которому оно, собственно, и было изначально послано. посмотри справку по win32, входящую в комплект Delphi. тебе понадобится SetWindowsHookEx с idHook =WH_GETMESSAGE и, собственно, процедура хука, в которой ты будешь делать все свои подсчёты. декларация этой процедуры должна совпадать с декларацией GetMsgProc. при закрытии программы не забудь делать UnhookWindowsHookEx.