http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx
, Если Вы не используете .net 3.5.
Я обработал бы это при помощи P/Invoke, чтобы назвать RegisterHotKey () для каждой горячей клавиши, и затем использовать NativeForm (предполагающий, что Вы используете WinForms) быть уведомленным относительно сообщения WM_HOTKEY. Это должно сохранить большую часть Вашего кода горячей клавиши в одном месте.
Самое хорошее решение, которое я нашел, это http://bloggablea.wordpress.com/2007/05/01/global-hotkeys-with-net/
Hotkey hk = new Hotkey();
hk.KeyCode = Keys.1;
hk.Windows = true;
hk.Pressed += delegate { Console.WriteLine("Windows+1 pressed!"); };
hk.Register(myForm);
Обратите внимание, как вы можете установить разные лямбды на разные горячие клавиши