Maison >développement back-end >C++ >Comment définir des raccourcis clavier globaux en C# à l'aide de l'API Win32 ?

Comment définir des raccourcis clavier globaux en C# à l'aide de l'API Win32 ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-24 05:36:13913parcourir

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

Guide de configuration globale des raccourcis clavier C#

Les raccourcis clavier globaux vous permettent de capturer les frappes même lorsque le programme n'est pas mis au point. Ceci est utile pour implémenter des touches de raccourci ou effectuer des actions spécifiques déclenchées par des combinaisons de touches. Vous trouverez ci-dessous des instructions détaillées pour définir des raccourcis clavier globaux à l'aide de C#.

Créer une classe de gestion des raccourcis clavier

Tout d'abord, créez une classe nommée KeyboardHook pour gérer l'enregistrement et la capture des raccourcis clavier :

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

Enregistrer les raccourcis clavier

Instanciez la classe KeyboardHook et utilisez ses méthodes RegisterHotKey pour enregistrer la combinaison de touches de raccourci souhaitée. Par exemple, pour enregistrer les touches Ctrl, Alt et F12 comme raccourcis clavier :

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

Gestion des événements de raccourci clavier

Pour exécuter du code lorsqu'un raccourci clavier est enfoncé, abonnez-vous à l'événement KeyboardHook de la classe KeyPressed :

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

Dans un gestionnaire d'événements, vous pouvez effectuer n'importe quelle action ou logique de votre choix.

Touche de raccourci de déconnexion

Pour éviter les fuites de mémoire, assurez-vous de déconnecter les raccourcis clavier lorsque le programme se termine ou lorsque les raccourcis clavier ne sont plus nécessaires :

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

Conseils importants

  • Cette technique nécessite un projet Windows Forms, pas un projet d'application console.
  • Évitez d'utiliser la classe NativeWindow dans des environnements multithread sans mécanismes de synchronisation appropriés.
  • RegisterHotKey Fonctions Il y a une limite de 256 combinaisons de touches de raccourci par application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn