Heim >Backend-Entwicklung >C++ >Wie kann ich globale Hotkeys in C# so einstellen, dass sie Ereignisse auslösen, auch wenn meine Anwendung nicht im Fokus ist?

Wie kann ich globale Hotkeys in C# so einstellen, dass sie Ereignisse auslösen, auch wenn meine Anwendung nicht im Fokus ist?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-24 05:22:08810Durchsuche

Legen Sie globale Hotkeys mit C# fest, um Ereignisse auszulösen (auch wenn die App nicht im Fokus ist)

In diesem Artikel wird beschrieben, wie Sie globale Hotkeys in C# festlegen, sodass Ereignisse auch dann ausgelöst werden können, wenn die Anwendung nicht im Fokus ist.

Frage:

Erfassen Sie Tastenanschläge, wenn das Programm nicht im Fokus ist (z. B. Strg Alt J), um Ereignisse innerhalb des Programms auszulösen.

Lösung:

Warnung: Dieser Code löst keine Ereignisse in der Konsolenanwendung aus. Bitte verwenden Sie das WinForms-Projekt, um die Ereignisfunktionalität zu implementieren.

Benutzerdefinierte Tastatur-Hook-Klasse:

<code class="language-csharp">public sealed class KeyboardHook : IDisposable
{
    private Window _window = new Window();
    private int _currentId;

    public KeyboardHook()
    {
        // ...
        //  按键事件处理
        // ...
    }

    public void RegisterHotKey(ModifierKeys modifier, Keys key)
    {
        // ...
        // 通过内部原生窗口注册热键
        // ...
    }

    public event EventHandler<KeyPressedEventArgs> KeyPressed;
}</code>

Fensterklasse für die Ereignisbehandlung:

<code class="language-csharp">private class Window : NativeWindow, IDisposable
{
    // ...
    protected override void WndProc(ref Message m)
    {
        // 处理热键按下
        if (m.Msg == WM_HOTKEY)
        {
            // ...
            // 从LParam中提取修饰符和键
            // ...

            // 触发KeyPressed事件
            KeyPressed?.Invoke(this, new KeyPressedEventArgs(modifier, key));
        }
    }

    // ...
}</code>

Verwendungsbeispiel:

<code class="language-csharp">public partial class Form1 : Form
{
    private KeyboardHook hook = new KeyboardHook();

    public Form1()
    {
        // ...
        hook.KeyPressed += hook_KeyPressed; //订阅事件
        hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);
        // ...
    }

    void hook_KeyPressed(object sender, KeyPressedEventArgs e)
    {
        // 处理按键事件
    }
}</code>

Hinweis:

  • Im Anwendungsbeispiel sind die Tastenkombinationen Strg, Alt und F12 als Hotkeys registriert.
  • Stellen Sie sicher, dass Sie die Sondertasten mit (ModifierKeys)1, (ModifierKeys)2 usw. korrekt konvertieren.

How Can I Set Global Hotkeys in C# to Trigger Events Even When My Application Is Not in Focus?

Das obige ist der detaillierte Inhalt vonWie kann ich globale Hotkeys in C# so einstellen, dass sie Ereignisse auslösen, auch wenn meine Anwendung nicht im Fokus ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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