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
Libérer: 2025-01-24 05:36:13
original
912 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal