GlobalKeyboardCapture.Maui 1.0.2

Requires NuGet 6.0.0 or higher.

dotnet add package GlobalKeyboardCapture.Maui --version 1.0.2                
NuGet\Install-Package GlobalKeyboardCapture.Maui -Version 1.0.2                
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="GlobalKeyboardCapture.Maui" Version="1.0.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GlobalKeyboardCapture.Maui --version 1.0.2                
#r "nuget: GlobalKeyboardCapture.Maui, 1.0.2"                
#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 GlobalKeyboardCapture.Maui as a Cake Addin
#addin nuget:?package=GlobalKeyboardCapture.Maui&version=1.0.2

// Install GlobalKeyboardCapture.Maui as a Cake Tool
#tool nuget:?package=GlobalKeyboardCapture.Maui&version=1.0.2                

GlobalKeyboardCapture.Maui

A powerful .NET MAUI library for global keyboard capture with strong support for barcode scanners. Provides system-wide key interception, hotkeys management.

NuGet NuGet License FOSSA Status .NET Support

GlobalKeyboardCapture.Maui Demo

Demo application showing key capture, barcode scanning, and hotkeys functionality

Features

  • 🔑 Global keyboard capture
  • 📊 Advanced keyboard input processing
  • 🏷️ Built-in barcode scanner support
  • ⌨️ Customizable hotkeys system
  • 📱 Cross-platform (Windows & Android)
  • 🎛️ Highly configurable
  • 🧩 Easy to integrate
  • 🔧 Built for .NET MAUI

Common Use Cases

  • Barcode scanner integration
  • Global hotkeys and shortcuts
  • System-wide keyboard monitoring
  • Custom keyboard input handling
  • Input automation
  • Multi-mode keyboard capture

Full key support:

  • Standard keys (A-Z, 0-9)
  • Function keys (F1-F24)
  • Modifier keys (Ctrl, Alt, Shift)
  • Windows OEM keys (;, /, [, ], etc)
  • Android special keys (Volume, Back, Menu)
  • Navigation keys
  • Special characters

Installation

dotnet add package GlobalKeyboardCapture.Maui

Or via the NuGet Package Manager:

Install-Package GlobalKeyboardCapture.Maui

Quick Start

  1. Register the service in your MauiProgram.cs:
public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseKeyboardHandling();

    builder.Services.AddKeyboardHandling(options =>
    {
        // Barcode specific settings
        options.BarcodeTimeout = 150;
        options.MinBarcodeLength = 8;
    });

    return builder.Build();
}
  1. Basic usage example:
public partial class MainPage : ContentPage
{
    private readonly IKeyHandlerService _keyHandlerService;
    private readonly BarcodeHandler _barcodeHandler;
    private readonly HotkeyHandler _hotkeyHandler;

    public MainPage(
        IKeyHandlerService keyHandlerService, 
        BarcodeHandler barcodeHandler,
        HotkeyHandler hotkeyHandler)
    {
        InitializeComponent();
        
        _keyHandlerService = keyHandlerService;
        _barcodeHandler = barcodeHandler;
        _hotkeyHandler = hotkeyHandler;
        
        SetupHandlers();
    }

    private void SetupHandlers()
    {
        // Setup barcode handling
        _barcodeHandler.BarcodeScanned += (sender, input) =>
        {
            MainThread.BeginInvokeOnMainThread(() =>
            {
                ProcessInput(input);
            });
        };

        // Setup global hotkeys
        _hotkeyHandler.RegisterHotkey("F2", () =>
        {
            EnableEditMode();
        });

        // Register handlers
        _keyHandlerService.RegisterHandler(_barcodeHandler);           
        _keyHandlerService.RegisterHandler(_hotkeyHandler);
    }
}

Advanced Usage

Custom Key Handler

Create your own key handler for specific needs:

public class CustomKeyHandler : IKeyHandler
{
    public bool ShouldHandle(string key) => true;

    public void HandleKey(string key)
    {
        // Your custom key handling logic
    }
}

Global Hotkeys

The library features a smart hotkey normalization system that allows flexible registration of keyboard shortcuts:

// Single key hotkeys
_hotkeyHandler.RegisterHotkey("F2", EnableEditMode);
_hotkeyHandler.RegisterHotkey("ESC", CancelOperation);

// All these registrations trigger the same hotkey (Ctrl+Alt+Shift+P)
_hotkeyHandler.RegisterHotkey("Ctrl+Alt+Shift+P", PrintAction);
_hotkeyHandler.RegisterHotkey("Shift+Ctrl+Alt+P", PrintAction);
_hotkeyHandler.RegisterHotkey("Alt+Shift+Control+P", PrintAction);

// Supports common aliases
_hotkeyHandler.RegisterHotkey("Control+Alt+P", PrintAction);  // "Control" is normalized to "Ctrl"
_hotkeyHandler.RegisterHotkey("Windows+Shift+X", ActionX);    // "Windows" is normalized to "Win"

// Case-insensitive handling
_hotkeyHandler.RegisterHotkey("CTRL+ALT+P", PrintAction);
_hotkeyHandler.RegisterHotkey("ctrl+alt+p", PrintAction);

//Special keys
_hotkeyHandler.RegisterHotkey("VolumeUp", VolumeControlAction); //Android Volume Up
_hotkeyHandler.RegisterHotkey("OEM173", VolumeControlAction); //OEM 173

The hotkey system provides:

  • Automatic normalization of modifier order (Ctrl → Alt → Shift → Win)
  • Case-insensitive handling
  • Common alias support (e.g., "Control" → "Ctrl")
  • Consistent behavior regardless of registration order
  • High-performance implementation with minimal allocations

Barcode Scanner Mode

_barcodeHandler.BarcodeScanned += (sender, input) =>
{    
    ProcessProduct(input); 
};

Performance Optimizations

The library is optimized for performance and efficiency:

  • Minimal Allocations: Uses modern .NET features to minimize garbage collection pressure
  • Fast Lookups: Optimized dictionary implementations for hotkey matching
  • Efficient String Handling: Smart string comparison and normalization
  • Aggressive Inlining: Critical paths are optimized for speed
  • Memory Efficiency: Careful management of memory allocations in hot paths

Key Features

Global Key Capture

  • Capture keyboard input regardless of focus
  • Works with all UI controls
  • System-wide key interception

Input Processing

  • Configurable input timeout
  • Input validation and filtering
  • Custom processing rules

Platform Support

  • Windows desktop applications
  • Android mobile applications
  • Consistent API across platforms

API Reference

Core Services

  • IKeyHandlerService: Main service for global keyboard handling
  • BarcodeHandler: Specialized handler for barcode input scenarios
  • HotkeyHandler: Global hotkeys management

Interfaces

  • IKeyHandler: Base interface for custom handlers
  • ILifecycleHandler: Application lifecycle management

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

FOSSA Status

Author

Anderson Fernandes do Nascimento

Support

If you encounter any issues or need help, please open an issue.

Product Compatible and additional computed target framework versions.
.NET net8.0-android34.0 is compatible.  net8.0-windows10.0.19041 is compatible.  net9.0-android35.0 is compatible.  net9.0-windows10.0.19041 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
1.0.2 36 11/23/2024
1.0.1 49 11/21/2024
1.0.0 42 11/21/2024

Initial release of GlobalKeyboardCapture.Maui