首頁 >後端開發 >C++ >如何在 C# 中設定全域熱鍵以觸發事件,即使我的應用程式未處於焦點狀態?

如何在 C# 中設定全域熱鍵以觸發事件,即使我的應用程式未處於焦點狀態?

Patricia Arquette
Patricia Arquette原創
2025-01-24 05:22:08806瀏覽

使用C#設定全域熱鍵以觸發事件(即使應用程式未處於焦點狀態)

本文介紹如何在C#中設定全域熱鍵,即使應用程式不在焦點狀態也能觸發事件。

問題:

擷取程式未處於焦點狀態時的按鍵(例如,Ctrl Alt J)以觸發程式內的事件。

解:

警告:此程式碼不會在控制台應用程式中觸發事件。請使用WinForms專案來實現事件功能。

自訂鍵盤鉤子類別:

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

用於事件處理的視窗類別:

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

使用方法範例:

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

注意:

  • 在使用方法範例中,Control、Alt和F12鍵組合被註冊為熱鍵。
  • 確保使用(ModifierKeys)1(ModifierKeys)2等正確轉換修飾鍵。

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

以上是如何在 C# 中設定全域熱鍵以觸發事件,即使我的應用程式未處於焦點狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn