v7.1.1 (December 30, 2025)
-
On Linux, event time is now a UNIX timestamp, as it was supposed to be.
-
libuiohook was updated to commit 9a521b3.
v7.1.0 (November 16, 2025)
-
A sequence of events can now be simulated together using
IEventSimulator.Sequence,IEventSimulationSequenceBuilder, andIEventSimulationSequenceTemplate. -
When simulating mouse wheel events on Windows, the rotation value is not flipped anymore if the scrolling direction is reversed in settings.
-
KeyCode.VcKanjiandKeyCode.VcHangulwere marked as obsolete - instead,KeyCode.VcHanjaandKeyCode.VcKanashould be used respectively. -
.NET 10 was added as a target.
-
net8.0-maccatalystwas removed as a target since .NET refuses to compile the project if it's present. -
SharpHook.Reactive now depends on Rx.NET 6.1.0.
-
The Mac Catalyst targets can now be conditionally skipped when building SharpHook which makes it possible to build it on Linux.
-
libuiohook was updated to commit 57a8f17.
v7.0.3 (October 5, 2025)
-
Mouse button release events for button 4 and 5 are now correctly dispatched on macOS.
-
libuiohook was updated to commit b1888a6.
v7.0.2 (September 21, 2025)
-
Mouse move events are not dropped based on previous click positions on Windows anymore.
-
Simulating text entry with characters like
\nor\tnow works correctly on Linux. -
libuiohook was updated to commit feafae0.
v7.0.1 (August 17, 2025)
-
The global hook correctly discerns right and left modifier keys again on Windows.
-
libuiohook was updated to commit e8b4814.
v7.0.0 (August 10, 2025)
-
SimpleReactiveGlobalHookwas renamed toReactiveGlobalHook. -
The
Run,RunAsync, andStopmethods as well as theIsRunningandIsDisposedproperties were moved fromIGlobalHookandIReactiveGlobalHookintoIBasicGlobalHookwhich bothIGlobalHookandIReactiveGlobalHooknow extend. -
Because of the above change,
RunAsyncfor reactive global hooks now returns aTaskinstead of anIObservable<Unit>. -
ReactiveLogSourceAdapternow contains a single constructor with a default parameter instead of two constructors.
-
SharpHook.R3 – a new package for integration with R3 was added.
-
EventLoopGlobalHook– a new implementation ofIGlobalHook– was added. -
IBasicGlobalHookandBasicGlobalHookBasewere added for easier creation of custom global hooks with different event forms. -
ReactiveLogSourceAdapternow implementsILogSourcein addition toIReactiveLogSource.
- On Windows, global hooks now correctly report the key that was pressed or released on non-QWERTY layouts.
- libuiohook was updated to commit a2cba5f.
v6.2.0 (July 19, 2025)
-
The ability to disable events of type
KeyTypedwas added. -
Simulation of keyboard events was fixed on macOS.
-
libuiohook was updated to commit 4217638.
v6.1.2 (June 22, 2025)
-
Simulation of letter keys in different layouts was fixed on Windows – the same keys are simulated regardless of the current keyboard layout (e.g., QWERTY or AZERTY).
-
libuiohook was updated to commit a8d1578.
v6.1.1 (June 3, 2025)
-
Simulation of mouse button press and release for buttons 2, 3, 4, and 5 was fixed on Linux.
-
The location of simulated mouse events was fixed on macOS.
-
libuiohook was updated to commit 0e77cac.
v6.1.0 (May 23, 2025)
- The ability to control the behaviour of
TestGlobalHookandTestProvider(simple dispatching from version 5 vs an event loop from version 6) was added. The simple behaviour from version 5 is the default as it is much easier to use.
v6.0.0 (May 18, 2025)
-
Support for Mac Catalyst on non-MAUI applications was added.
-
The minimum .NET Framework version was bumped to 4.7.2. Direct support for .NET 6 and 7 was removed, but it's still available through .NET Standard.
-
All structs and enums were moved from
SharpHook.NativetoSharpHook.Data. -
ModifierMaskandEventReservedValueMaskwere merged into a single enum –EventMask. -
UioHookEvent.Reservedwas removed. Its values are now part ofUioHookEvent.Mask. -
All constructors of
SimpleGlobalHook,TaskPoolGlobalHook,SimpleReactiveGlobalHook, andReactiveGlobalHookAdapterexcept the main ones were removed. -
TaskPoolGlobalHookOptionswas removed. -
All obsolete values in the
KeyCodeenum were removed. -
LogSource.Registerwas removed. -
Members of
HookExceptionrelated to binary formatters were removed. -
The behaviour of
TestGlobalHookandTestProviderwas changed. Instead of dispatching events in the same thread that simulates them, they now instead add events into an event loop running on a different thread. -
TestProvidernow throws an exception ifRunorRunAsyncis called and it's already running.
-
The ability to stop global hooks without disposing of them was added.
-
Several functions for working with the macOS Accessibility API were added.
-
UioHookEvent.Masknow contains the state of modifiers and mouse buttons regardless of the global hook type (keyboard, mouse, or both). -
Running global hooks won't be garbage-collected.
-
Getting libuiohook logs on Mac Catalyst applications was fixed.
-
The issue with global hooks breaking Alt codes on Windows was fixed.
-
Getting events for Caps Lock was fixed on macOS.
-
Disabling access to the Accessibility API when a global hook is running on macOS won't freeze the OS anymore.
-
Disposing a
TaskPoolGlobalHookinside an event handler doesn't throw an exception anymore.
-
libuiohook was updated to commit c61b486.
-
SharpHook.Reactive now depends on Rx.NET 6.0.1.
-
Docs for older versions were removed. From now on, only the latest version will have docs hosted on sharphook.tolik.io.
v5.3.9 (March 29, 2025)
-
The state of the modifiers is now queried on every event instead of tracking them internally which removes inconsistencies when some events are skipped.
-
.NET 9 was added as a target.
-
libuiohook was updated to commit 961ed5a.
v5.3.8 (September 27, 2024)
- libuiohook was updated to commit ce96f42 which fixes mouse button release events for mouse buttons 2 and 3 on Linux.
v5.3.7 (July 9, 2024)
- libuiohook was updated to commit 1c96539 which fixes a CPU usage issue on Linux.
v5.3.6 (May 22, 2024)
- SharpHook now provides the correct version of libuiohook for macOS x64.
v5.3.5 (May 20, 2024)
-
Simulating mouse events when the screen configuration changes was fixed on Windows.
-
Simulating text with repeating characters was fixed on Windows.
-
libuiohook was updated to commit c7500ce.
v5.3.4 (May 5, 2024)
-
Simulating some keys was fixed on Windows.
-
libuiohook was updated to commit 5128c04.
v5.3.3 (April 28, 2024)
-
Simulating mouse movement on multiple screens was fixed on Windows.
-
libuiohook was updated to commit 902a30b.
v5.3.2 (April 2, 2024)
-
Publishing applications which reference SharpHook with Visual Studio should now work correctly.
-
Mouse movement simulation is now more precise on Windows.
-
libuiohook was updated to commit 5024193.
v5.3.1 (March 3, 2024)
- Disposing an already disposed test global hook is now safe and won't throw an exception.
v5.3.0 (February 24, 2024)
-
It's now possible to run keyboard-only or mouse-only global hooks.
-
Simulating key press/release events was fixed for some keys (such as media keys) on Windows.
-
Global hooks and the event simulator now don't throw an exception on null parameters and instead use default values.
-
libuiohook was updated to commit 963415f.
v5.2.3 (February 2, 2024)
- Windows x86 support was fixed for .NET Framework.
v5.2.2 (January 13, 2024)
-
The package targets are now executed only for .NET Framework since they aren't needed for .NET/.NET Core.
-
libuiohook resolution for Linux Arm64 was fixed in package targets.
v5.2.1 (January 3, 2024)
-
HookEventArgs.IsEventSimulatedhas been fixed – previously it always returnedtrue. -
kCGEventTapDisabledByTimeoutdoesn't break the global hook on macOS anymore. -
The packages are now marked as AOT-compatible.
-
libuiohook was updated to commit 7dbdc09.
v5.2.0 (December 16, 2023)
-
Simulated events can now be distinguished from real events using the
HookEventArgs.IsEventSimulatedproperty. -
Key codes which aren't present on modern keyboards have been deprecated.
-
libuiohook was updated to commit d710f0f.
v5.1.2 (November 25, 2023)
-
An issue with key events changing the way some applications handle Alt keys on Windows was fixed.
-
.NET 8 was added as a target.
-
libuiohook was updated to commit 9027a77.
v5.1.1 (October 13, 2023)
-
An issue with key events not being simulated on Linux without a running global hook was fixed.
-
libuiohook was updated to commit a8b6506.
v5.1.0 (October 8, 2023)
-
Mouse coordinates were fixed for event simulation on Windows with multiple screens.
-
Simulating multiple mouse clicks on macOS was fixed.
-
An issue with some events being ignored on Windows was fixed.
-
Reactive log source adapter can now accept a default scheduler.
-
libuiohook was updated to commit 2712b31.
v5.0.0 (August 10, 2023)
-
Support for Mac Catalyst was added which makes it possible to use SharpHook in .NET MAUI apps on macOS.
-
The minimum .NET Framework version was bumped to 4.6.2.
-
Support for Windows on Arm32 was removed.
-
Almost all
KeyCodevalues were changed. New codes were added and some were removed. The actual enum values are meaningless and may be changed again in the future. -
MouseWheelEventDatadoesn't containAmountanymore. -
Mouse wheel simulation doesn't accept the amount anymore. Instead it accepts the scroll direction and type which makes it possible to simulate horizontal scrolling.
-
The meaning of the mouse wheel rotation value was changed – a positive value indicates that the wheel is rotated up or left, and a negative value indicates that the wheel is rotated down or right.
-
KeyboardEventData.KeyCharwas renamed toKeyboardEventData.RawKeyCharand theKeyboardEventData.KeyCharproperty was added. -
LogEntryParseris now a singleton and doesn't have a public constructor. -
The constants in the
MouseWheelScrollDirectionenum were shortened:VerticalDirectiontoVerticalandHorizontalDirectiontoHorizontal.
-
Text entry simulation was added.
-
Low-level functionality providers were added – they can be used instead of directly using the
UioHookclass. -
Horizontal mouse wheel simulation is now possible.
-
Classes which help with testing were added.
-
Reactive global hook can now accept a default scheduler which will be used for all observables.
-
Extension methods for
SharpHook.Native.ModifierMaskwere added.
-
Global hooks can now be created and disposed multiple times on Windows without problems.
-
Many key code mappings to OS-specific key codes were fixed.
-
KeyTypedevents are now better at determining which characters should be produced by key presses on Windows.
-
libuiohook was updated to commit 6f42599.
-
All methods in all structs in the
UioHook.Nativenamespace are now marked asreadonly. -
SharpHook.Reactive now depends on Rx.NET 6.0.0.
-
Docs now use a new theme.
v4.2.1 (June 18, 2023)
-
libuiohook was updated to commit 34f279c.
-
Getting screen info for multiple screens was fixed on Windows.
-
A memory leak from getting screen info was fixed.
v4.2.0 (April 8, 2023)
-
libuiohook was updated to commit 56e8cb8.
-
The ability to simulate mouse movement relative to the current cursor position was added.
v4.1.0 (March 27, 2023)
-
libuiohook was updated to commit 3a90aeb.
-
The ability to simulate mouse press/release events at the current coordinates was added.
-
Turns out that libuiohook has always ignored mouse coordinates when simulating mouse wheel events, so the method which simulates them without coordinates was added, and the previous one was marked as obsolete.
v4.0.1 (March 12, 2023)
libuiohook was updated to commit 41a17e2 which fixes support for multiple screens on Windows.
v4.0.0 (November 9, 2022)
-
.NET 7 support was added and
[LibraryImport]is used instead of[DllImport]on it. -
Explicit targets for .NET 5 and .NET Core 3.1 were removed, though the library can be used on those platforms through .NET Standard.
-
HookEventArgsnow contains theSuppressEventproperty instead ofReserved. -
KeyboardEventData.KeyCharis now of typeushortinstead ofchar– this was changed purely for marshalling reasons and it should still be used as achar. -
Simulating mouse presses and releases now requires providing mouse pointer coordinates.
-
The ability to make
RunAsynccreate a background thread was added. -
KeyCode.VcPrintscreenwas renamed toKeyCode.VcPrintScreen. -
Versioned libuiohook binaries for macOS and Linux were removed from the NuGet package as they were bit-for-bit same as the unversioned binaries.
-
libuiohook is at commit 1ece4c4.
v3.1.3 (October 27, 2022)
- Copying native libraries to the build output folder should now work correctly for .NET Framework-based projects (#18).
v3.1.2 (October 19, 2022)
-
A fix for posting keyboard events on Windows was added, as suggested by FaithBeam, and fixes #20.
-
libuiohook is at commit fc779b0.
v3.1.1 (August 5, 2022)
v3.1.0 (July 30, 2022)
-
SharpHook now uses a build of libuiohook which links the C runtime statically on Windows. This means that Visual C++ Redistributable is not needed for client apps to run (the logging functionality is a exception though). (#14).
-
The
EmptyLogSourceclass was added, mostly for using it instead ofLogSourcein release builds of client apps. -
A memory issue which was fixed for hooks in v3.0.1 was fixed for logging as well.
v3.0.2 (July 1, 2022)
-
Windows x86 support was fixed (#10).
-
The functions in
UioHookwhich return system properties now returnintinstead oflong. This is a tiny breaking change, but I believe it's too small to warrant a bump of the major (or even minor) version.
v3.0.1 (June 25, 2022)
-
A memory issue which arose only when debugging was fixed (#12).
-
libuiohook was updated to commit de3f683.
v3.0.0 (March 27, 2022)
-
The ability to get libuiohook logs was added.
-
Event simulation now ignores event masks not only on Windows, but everywhere, and returns a result.
-
UioHookEvent.Timenow contains the event's UNIX timestamp. -
IGlobalHookandIReactiveGlobalHooknow contain theIsDisposedproperty. -
The
HookEvent<TArgs>class was removed from SharpHook.Reactive. -
Several minor (but breaking) changes in the
UioHookclass. -
libuiohook is now at version 1.3 and commit a887cde.
v2.0.0 (February 4, 2022)
-
Global hooks now support both blocking and non-blocking running via the
RunandRunAsyncmethods, and theStartmethod was removed. -
Support for suppressing event propagation.
-
UioHookEvent.Timenow has the correct type –ulonginstead ofushort. -
Global hooks now throw an exception if they are started when already running.
v1.1.0 (December 4, 2021)
-
Cross-platform input event simulation using libuiohook.
-
Support for Windows on Arm64.
-
MouseWheelEventData.Rotationnow has the correct type –shortinstead ofushort. This is a tiny breaking change, but had to be fixed. -
libuiohook was updated to commit 5cf864d.
v1.0.1 (November 21, 2021)
libuiohook was updated to commit 28ccf9c.
v1.0.0 (November 8, 2021)
This release is basically the same as v1.0.0 Preview 4, but built with a GA release of .NET 6.
v1.0.0 Preview 4 (November 6, 2021)
-
When
Disposeon global hooks is called, they now reset the static hook callback function. -
HookDisabledis now emitted correctly for reactive global hooks. -
The assemblies are now trimmable.
v1.0.0 Preview 3 (November 1, 2021)
-
IsRunningwas added toSharpHook.IGlobalHookandSharpHook.Reactive.IReactiveGlobalHook. -
Disposeis now safe to call when the hook is not running for all implementations. -
libuiohook was updated to commit 4867b8e.
v1.0.0 Preview 2 (October 26, 2021)
-
SharpHook.Native.ModifierMask.Nonewas added. -
Package descriptions were fixed.
v1.0.0 Preview 1 (October 26, 2021)
-
The basic functionality is implemented: native functions, default global hooks, and reactive global hooks.
-
libuiohook is at commit e2c581f.