GlobalHotkeysRX 2.0.0

dotnet add package GlobalHotkeysRX --version 2.0.0                
NuGet\Install-Package GlobalHotkeysRX -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GlobalHotkeysRX" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GlobalHotkeysRX --version 2.0.0                
#r "nuget: GlobalHotkeysRX, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install GlobalHotkeysRX as a Cake Addin
#addin nuget:?package=GlobalHotkeysRX&version=2.0.0

// Install GlobalHotkeysRX as a Cake Tool
#tool nuget:?package=GlobalHotkeysRX&version=2.0.0                

GlobalHotKeysRX

Simple C# library for creating system-wide hotkeys. It allows you to implement keyboard shortcuts to perform specific actions in your application, regardless of the active window. You can use it in background/windowless applications.

It supports combinations of:

-Modifier keys: Alt, Control, Shift, Win (up to 3 at a time).

-Keys, listed at Virtual-Key Codes.

Usage

Import library

using GlobalHotKeysRX;

Initialization

// default constructor
GlobalHotkeys appHotkeys = new GlobalHotkeys();

// or you can call it with one or more 'Hotkey' parameters.
GlobalHotkeys appHotkeys = new GlobalHotkeys(
  new Hotkey(Modifier.Shift, VKey.P, myFunction),             
  new Hotkey(Modifier.Alt, VKey.S, () => {/* code */})   // lambda expression
  new Hotkey(Modifier.Control, VKey.Y)
);

*Use the | operator to combine/add modifiers. For example, combine Control + Alt to get AtlGr

new Hotkey(Modifier.Control | Modifier.Alt, VKey.P, myFunction) // AltGr + P

*By using 'Modifiers.NoRepeat' with another modifier, the application will only receive another WM_HOTKEY message when the key is released and then pressed again while a modifier is held down.

new Hotkey(Modifier.Shift | Modifier.NoRepeat, VKey.P, myFunction)

* If you are in a Windows Form proyect

you need to specify the handle, either in constructor...

GlobalHotkeys appHotkeys = new GlobalHotkeys(this.Handle);

...or through the ClientHandle property

appHotkeys.ClientHandle = this.Handle;

Also you must add this to the form

protected override void WndProc(ref Message m)
{
   if(m.Msg == WinApi.WM_HOTKEY)
       appHotkeys.OnWinFormMessage(m);  // Replace by your own instance name

   // (Optional) Stops any default or additional processing of the message.
   m.Result = (IntPtr)1;

   base.WndProc(ref m);
}

Adding a hotkey after initialization

appHotkeys.Add(Modifier.Win, VKey.NUM_0);

// or
var htk = new Hotkey(Modifier.Win, VKey.NUM_0, myFuntion);
appHotkeys.Add(htk);   

void myFunction()
{
    // code when a hotkey occurs...
}

Removing

appHotkeys.Remove(Modifier.Shift, VKey.Z);

// or
appHotkeys.Remove(htk);

Subscribe to hotkeys

appHotkeys.HotkeyPressed += AppHotkeys_HotkeyPressed;
// ...
public void AppHotkeys_HotkeyPressed(object sender, HotkeyEventArgs e)
{
  MessageBox.Show($"Hotkey {e.Modifier} + {e.Key} was pressed!");
}

Cleaning up resources

appHotkeys.Dispose();

Simplest way 🙂 (wpf)

GlobalHotkeys ghk = new GlobalHotkeys(new Hotkey(Modifier.Shift, VKey.V, () => { /*code*/ }));

Known issues

This library uses Win32 API. Typically, RegisterHotKey fails if the keystrokes specified for the hot key have already been registered for another hot key. However, some pre-existing, default hotkeys registered by the OS (such as PrintScreen, which launches the Snipping tool) may be overridden by another hot key registration when one of the app's windows is in the foreground.

Ko-fi Patreon

Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible. 
.NET Framework net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.0

    • No dependencies.
  • net8.0-windows7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.0 115 10/11/2024
1.1.0 109 8/1/2024
1.0.0 84 7/28/2024

Now supports Winforms