I want to provide an option with a media player I'm working on for the media keys to work even when it's minimized. What's the best way to capture and process those key events in C# without having focus? Is it even possible?
-
I'm glad you're making it an option - I hate when arrogant apps take over system-wide resources like that. – Mark Ransom Oct 12 '11 at 21:12
4 Answers
I don't think that there is an easy way to do this but this (Using Window Messages to Implement Global System Hooks in C#) project may help. I added below code
_GlobalHooks.Keyboard.KeyboardEvent += (w, l) =>
{
this.LblMouse.Text = "KEY: " + w.ToInt32().ToString("X8") + " " + l.ToInt32().ToString("X8");
};
_GlobalHooks.Keyboard.Start();
to the constructor of Form1 of GlobalHookTest and was able to monitor all the keyboard events.

- 114,136
- 19
- 178
- 224
You can do that but only with some global hooking - for source code and details see
- http://globalmousekeyhook.codeplex.com/
- http://www.codeproject.com/KB/system/globalsystemhook.aspx (more low level and will get any keys)
EDIT:
BEWARE that some Media Keys get translated into APP_COMMAND
Windows messages - so you should think about hooking those too.
IF you want to make your mediaplayer automagically start on the press of a (media) key see the links here.
Use global keyboard hooks (Processing Global Mouse and Keyboard Hooks in C#)
Just create the hook when starting your app/form. You can set KeyEventHandlers for the global key up, down and press events. You can then check to see if it is the Key combination you are looking for.

- 31
- 5