Ciao
Quello che vuoi fare è un keylogger, uno strumento da usare solo con buoni propositi...
Ti dò un avviamento sulla strada da seguire: quello che bisogna fare è installare un Hook nel sistema, questo usando una chiamata all'API SetWindowsHookEx:
[DllImport("user32.dll")]
static extern IntPtr SetWindowsHookEx(
int idHook, //Il tipo di hook da installare
KeybordProcDelegate lpfn, //La funzione chiamata dall'hook
IntPtr hMod, //L'handle del modulo dove risiede la lpfn
uint dwThreadId); //Il thread id a cui è associata lpfn
La firma del delegato per l'hook da tastiera è questa:
delegate IntPtr KeybordProcDelegate(int code, IntPtr wParam, IntPtr lParam);
Devi indicare all'API che l'hook deve monitorare la tastiera, questo sfruttando opportunamente il primo parametro dell'API:
private const int WH_KEYBOARD = 2;
private const int WH_KEYBOARD_LL = 13; //Eventi di tastiera a basso livello
Il penultimo parametro deve essere ottenuto tramite l'API GetModuleHandle(null) (ottiene l'handle del codulo corrente)
[DllImport("kernel32.dll")]
static extern IntPtr GetModuleHandle(string lpModuleName);
E l'ultimo parametro deve essere 0 per impostare l'hook su tutti i thread.
Quando ricevi un messaggio dalla procedura di Hook, prima di uscire devi chiamare l'API CallNextHookEx:
E prima di terminare l'applicazione devi chiamare l'API UnHookWindowsHookEx:
[DllImport("user32.dll")]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
Questa è la documantazione su MSDN: http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
Luca