Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menetapkan Kekunci Panas Global dalam C# Menggunakan API Win32?

Bagaimana untuk Menetapkan Kekunci Panas Global dalam C# Menggunakan API Win32?

Patricia Arquette
Patricia Arquetteasal
2025-01-24 05:36:13973semak imbas

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

Panduan Tetapan Kekunci Panas Global C#

Kekunci pintas global membolehkan anda menangkap ketukan kekunci walaupun program tidak berada dalam fokus. Ini berguna untuk melaksanakan kekunci pintasan atau melakukan tindakan khusus yang dicetuskan oleh gabungan kekunci. Di bawah ialah arahan terperinci untuk menetapkan hotkey global menggunakan C#.

Buat kelas pengendalian hotkey

Pertama sekali, buat kelas bernama KeyboardHook untuk mengendalikan pendaftaran dan menangkap kekunci pintas:

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

Daftar kekunci pintas

Segera kelas KeyboardHook dan gunakan kaedah RegisterHotKeynya untuk mendaftar kombinasi hotkey yang diingini. Contohnya, untuk mendaftarkan kekunci Ctrl, Alt dan F12 sebagai kekunci pintas:

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

Mengendalikan acara hotkey

Untuk melaksanakan kod apabila kekunci pintas ditekan, langgan acara KeyboardHook kelas KeyPressed:

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

Dalam pengendali acara anda boleh melakukan sebarang tindakan atau logik yang anda mahukan.

Kekunci Panas Log Keluar

Untuk mengelakkan kebocoran memori, pastikan anda log keluar kekunci pintas apabila program keluar atau apabila kekunci pintasan tidak lagi diperlukan:

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

Petua Penting

  • Teknik ini memerlukan projek Windows Forms, bukan projek aplikasi konsol.
  • Elakkan menggunakan kelas NativeWindow dalam persekitaran berbilang benang tanpa mekanisme penyegerakan yang sesuai.
  • RegisterHotKey Fungsi Terdapat had 256 kombinasi hotkey bagi setiap aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Kekunci Panas Global dalam C# Menggunakan API Win32?. 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