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
Lepaskan: 2025-01-24 05:22:08
asal
890 orang telah melayarinya

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:

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;
}
Salin selepas log masuk

Kelas tetingkap untuk pengendalian acara:

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));
        }
    }

    // ...
}
Salin selepas log masuk

Contoh penggunaan:

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)
    {
        // 处理按键事件
    }
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan