Maison > développement back-end > C++ > Comment puis-je définir des raccourcis clavier globaux en C# pour déclencher des événements même lorsque mon application n'est pas ciblée ?

Comment puis-je définir des raccourcis clavier globaux en C# pour déclencher des événements même lorsque mon application n'est pas ciblée ?

Patricia Arquette
Libérer: 2025-01-24 05:22:08
original
810 Les gens l'ont consulté

Définissez des raccourcis clavier globaux à l'aide de C# pour déclencher des événements (même si l'application n'est pas active)

Cet article décrit comment définir des raccourcis clavier globaux en C# afin que des événements puissent être déclenchés même si l'application n'est pas active.

Question :

Capturez les frappes lorsque le programme n'est pas mis au point (par exemple Ctrl Alt J) pour déclencher des événements au sein du programme.

Solution :

Attention : Ce code ne déclenchera pas d'événements dans l'application console. Veuillez utiliser le projet WinForms pour implémenter la fonctionnalité d'événement.

Classe de crochet de clavier personnalisée :

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

Classe de fenêtre pour la gestion des événements :

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

Exemple d'utilisation :

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

Remarque :

  • Dans l'exemple d'utilisation, les combinaisons de touches Contrôle, Alt et F12 sont enregistrées comme raccourcis clavier.
  • Assurez-vous de convertir correctement les touches de modification en utilisant (ModifierKeys)1, (ModifierKeys)2, etc.

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

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