I have a simple WPF application and I need to capture F1 key pressed in Windows (Operation System), even if my WPF window is minimized, or it isn't activated.
I have problems with detecting this. I searched on Internet and I found many results, but they didn't helped me.
For detecting a key pressed inside of application I used this simple code:
AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)KeyPressed);
private void KeyPressed(object sender, KeyEventArgs e)
{
if (e.Key == Key.F1)
{
//my code went here
}
}
But this doesn't work when my window isn't activated.
So, my question is: how to detect global key press?
I repeat: It is a WPF application.
Yes, the keys are global.
The KeyPress event is used in the Windows Form when a user presses a character, space, or backspace key during the focus on the control, the KeyPress event occurs. Furthermore, the keypress event is raised only when printable keys or numbers such as alphabets (a, b, c) are processed with Windows Form.
ki. wVk = 0x41; // virtual-key code for the "a" key ip. ki. dwFlags = 0; // 0 for key press SendInput(1, &ip, sizeof(INPUT)); // ...
No need to Keyboard Hooking
. Just use RegisterHotKey
(Defines a system-wide hot key) and UnregisterHotKey
from Windows API. Try using these in C# from pinvoke.net or these tutorials:
There is a sample in Microsoft Forums.
You can use these modifiers and Virtual-Key Codes:
MOD_ALT (0x0001) MOD_CONTROL (0x0002) MOD_NOREPEAT (0x4000) MOD_SHIFT (0x0004) MOD_WIN (0x0008)
for example F1 key is VK_F1 (0x70)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With