Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menetapkan Kekunci Panas Global dalam C# untuk Mencetuskan Peristiwa Walaupun Aplikasi Saya Tidak Fokus?

Bagaimanakah Saya Boleh Menetapkan Kekunci Panas Global dalam C# untuk Mencetuskan Peristiwa Walaupun Aplikasi Saya Tidak Fokus?

Patricia Arquette
Patricia Arquetteasal
2025-01-24 05:22:08845semak imbas

Tetapkan kekunci pintas global menggunakan C# untuk mencetuskan peristiwa (walaupun apl tidak berada dalam fokus)

Artikel ini menerangkan cara menetapkan kekunci pintas global dalam C# supaya peristiwa boleh dicetuskan walaupun aplikasi tidak berada dalam fokus.

Soalan:

Tangkap ketukan kekunci apabila program tidak berada dalam fokus (cth. Ctrl Alt J) untuk mencetuskan peristiwa dalam program.

Penyelesaian:

Amaran: Kod ini tidak akan mencetuskan peristiwa dalam aplikasi konsol. Sila gunakan projek WinForms untuk melaksanakan fungsi acara.

Kelas cangkuk papan kekunci tersuai:

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

Kelas tetingkap untuk pengendalian acara:

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

Contoh penggunaan:

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

Nota:

  • Dalam contoh penggunaan, kombinasi kekunci Kawalan, Alt dan F12 didaftarkan sebagai kekunci pintas.
  • Pastikan anda menukar kunci pengubah suai dengan betul menggunakan (ModifierKeys)1, (ModifierKeys)2, dsb.

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Kekunci Panas Global dalam C# untuk Mencetuskan Peristiwa Walaupun Aplikasi Saya Tidak Fokus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn