Easily handle shortcut keys even when your WPF or WinForms app doesn't have focus. Declare hotkeys in XAML with the familiar KeyBinding
syntax.
Nuget packages:
Add a reference to NHotkey.dll
and NHotkey.WindowsForms.dll
. In the file where you want to handle hotkeys, import the NHotkey.WindowsForms
namespace:
using NHotkey.WindowsForms;
During initialization, add some hotkeys:
HotkeyManager.Current.AddOrReplace("Increment", Keys.Control | Keys.Alt | Keys.Add, OnIncrement); HotkeyManager.Current.AddOrReplace("Decrement", Keys.Control | Keys.Alt | Keys.Subtract, OnDecrement);
EventHandler<HotkeyEventArgs>
that will be called when this hotkey is pressed. For instance:private void OnIncrement(object sender, HotkeyEventArgs e) { Value++; e.Handled = true; } private void OnDecrement(object sender, HotkeyEventArgs e) { Value--; e.Handled = true; }
If you want to handle several hotkeys with the same handler, you can check the Name
property of the HotkeyEventArgs
:
private void OnIncrementOrDecrement(object sender, HotkeyEventArgs e) { switch (e.Name) { case "Increment": Value++; break; case "Decrement": Value--; break; } e.Handled = true; }
The approach for WPF is very similar to the one for Windows Forms; the exposed API is slightly different to account for the differences between WinForms and WPF. The WPF version also supports KeyBindings
.
Add a reference to NHotkey.dll
and NHotkey.Wpf.dll
. In the file where you want to handle hotkeys, import the NHotkey.Wpf
namespace:
During initialization, add some hotkeys:
HotkeyManager.Current.AddOrReplace("Increment", Key.Add, ModifierKeys.Control | ModifierKeys.Alt, OnIncrement); HotkeyManager.Current.AddOrReplace("Decrement", Key.Subtract, ModifierKeys.Control | ModifierKeys.Alt, OnDecrement);
EventHandler<HotkeyEventArgs>
that will be called when this hotkey is pressed.To support applications that use the MVVM pattern, you can also specify hotkeys in XAML using InputBindings
. Just declare KeyBindings
as usual, and set the HotkeyManager.RegisterGlobalHotkey
attached property to true
:
... <Window.InputBindings> <KeyBinding Gesture="Ctrl+Alt+Add" Command="{Binding IncrementCommand}" HotkeyManager.RegisterGlobalHotkey="True" /> <KeyBinding Gesture="Ctrl+Alt+Subtract" Command="{Binding DecrementCommand}" HotkeyManager.RegisterGlobalHotkey="True" /> </Window.InputBindings> ...
Known limitations of this feature
HotkeyManager
can't detect if you remove a KeyBinding
; it only relies on the attached property being set to true or false. If you want to remove a KeyBinding at runtime, make sure you set HotkeyManager.RegisterGlobalHotkey
to false, otherwise it will still be registeredKeyBinding
at runtime is currently not supported. If you need to modify a KeyBinding
at runtime, you need to set HotkeyManager.RegisterGlobalHotkey
to false, change the key, and set HotkeyManager.RegisterGlobalHotkey
to true again.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4