To sto zelis se zove
Keyboard hook. Ukratko receno, hooks su sistemska stvar Windows-a i nije podrzano u .Net-u, tako da ti ne ginu interopovi na API funkcije SetWindowsHookEx, UnhookWindowsHookEx i CallNextHookEx. Hook mora da bude pisan kao DLL, a iz druge aplikacije kacis tvoj DLL sa hook-om na lanac sa ostalima (sa SetWindowsHookEx), tako da na kraju obavezno pozovi sledecu hook proceduru sa CallNextHookEx. Kada se nesto desi na tastaturi, tvoja procedura ciji pointer si prosledio pri pozivu na SetWindowsHookEx ce biti pozvana i tu radi sta ti je drago - samo nemoj da preterujes sa duzinom izvrsavanja jer ce da blokira ostale hook proceduce dok tvoja ne zavrsi. Kada aplikacija treba da se ugasi, pozovi UnhookWindowsHookEx i to je to
Zbog sveg tog baratanja sa pointerima (pazi kako ih deklarises da ih ne pocisti GC) i marshalovanja preporucio bih ti da koristis unmanaged kod.
Nacices na netu gomilu tekstova o pisanju hook-va.
Live long and prosper

America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.