Heim > Backend-Entwicklung > C++ > Wie lege ich globale Hotkeys in C# mithilfe der Win32-API fest?

Wie lege ich globale Hotkeys in C# mithilfe der Win32-API fest?

Patricia Arquette
Freigeben: 2025-01-24 05:36:13
Original
943 Leute haben es durchsucht

How to Set Global Hotkeys in C# Using Win32 API?

C# Global Hotkey Setting Guide

Globale Hotkeys ermöglichen es Ihnen, Tastenanschläge zu erfassen, auch wenn das Programm nicht im Fokus ist. Dies ist nützlich, um Tastenkombinationen zu implementieren oder bestimmte Aktionen auszuführen, die durch Tastenkombinationen ausgelöst werden. Nachfolgend finden Sie detaillierte Anweisungen zum Festlegen globaler Hotkeys mit C#.

Erstellen Sie eine Hotkey-Handhabungsklasse

Erstellen Sie zunächst eine Klasse mit dem Namen KeyboardHook, um die Registrierung und Erfassung von Hotkeys zu verwalten:

<code class="language-csharp">public sealed class KeyboardHook : IDisposable
{
    // 导入必要的Win32 API函数
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    // 定义一个类来处理窗口消息
    private class Window : NativeWindow, IDisposable
    {
        ...
        // 处理Win32热键消息
        protected override void WndProc(ref Message m)
        {
            ...
            // 调用事件以通知父级
            if (KeyPressed != null)
                KeyPressed(this, new KeyPressedEventArgs(modifier, key));
        }
    }

    private Window _window = new Window();
    private int _currentId;

    // 注册热键
    public void RegisterHotKey(ModifierKeys modifier, Keys key)
    {
        ...
        // 注册热键
        if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
            throw new InvalidOperationException("无法注册热键。");
    }
}</code>
Nach dem Login kopieren

Hotkeys registrieren

Instanziieren Sie die KeyboardHook-Klasse und verwenden Sie ihre RegisterHotKey-Methoden, um die gewünschte Hotkey-Kombination zu registrieren. Um beispielsweise die Tasten Strg, Alt und F12 als Hotkeys zu registrieren:

<code class="language-csharp">hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);</code>
Nach dem Login kopieren

Verwaltung von Hotkey-Ereignissen

Um Code auszuführen, wenn ein Hotkey gedrückt wird, abonnieren Sie das KeyboardHook-Ereignis der Klasse KeyPressed:

<code class="language-csharp">hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);</code>
Nach dem Login kopieren

In einem Event-Handler können Sie jede gewünschte Aktion oder Logik ausführen.

Abmelde-Hotkey

Um Speicherverluste zu vermeiden, melden Sie Hotkeys unbedingt ab, wenn das Programm beendet wird oder wenn die Hotkeys nicht mehr benötigt werden:

<code class="language-csharp">hook.Dispose();</code>
Nach dem Login kopieren

Wichtige Tipps

  • Diese Technik erfordert ein Windows Forms-Projekt, kein Konsolenanwendungsprojekt.
  • Vermeiden Sie die Verwendung der Klasse NativeWindow in Multithread-Umgebungen ohne entsprechende Synchronisierungsmechanismen.
  • RegisterHotKeyFunktionen Es gibt ein Limit von 256 Hotkey-Kombinationen pro Anwendung.

Das obige ist der detaillierte Inhalt vonWie lege ich globale Hotkeys in C# mithilfe der Win32-API fest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage