Globale Hooks müssen in einer eigenen DLL liegen, da jedes Programm das gerade läuft diese DLL in seinen geschützten Speicher laden muss.
Was natürlich bedeutet, dass die DLL nicht "gemanaget" sein darf (sprich du musst die DLL in C proggen).
Zum Glück gibts allerdings schon fertige Bindings:
http://www.codeproject.com/csharp/GlobalSystemHook.asp
Dank auch von mir an guenni81