Hola,
El tema es bastante amplio, tal vez si nos delimitas un poco más lo que necesitas saber podamos ayudarte mejor. En cualquier caso este tipo de tareas no suelen realizarse demasiado con managed code, que es la principal area de conocimiento de la gente de Baleares on .NET.
Como introducción al hooking, decir que es una técnica que se utiliza para interceptar llámadas a funciones, básicamente lo que haces es poner tu código entre el origen y el destino para ejecutar diversas acciones, ya sea: monitorizar, reemplazar una llamada por otra, etc.
Hay varios ejemplos por ahí genéricos que te permiten hacerlo de forma genérica, además hace ya unos cuantos años vi un libro que te explicaba como hacer hooking incluso a nivel de Kernel, aunque no recuerdo el título (lo siento mi memoria es bastante limitada para estas cosas).
Una buena forma para iniciarse sería capturar las pulsaciones del teclado o del ratón, puedes empezar mirando las API de user32.dll: SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx.
Si tengo tiempo intentaré montarlo con C#, aunque no prometo nada que últimamente no tengo tiempo ni de respirar.
Jose Fco Bonnin
-----------------------
Coordinador Baleares on .NET
www.josefcobonnin.com