Heim >Backend-Entwicklung >C++ >Wie kann ich globale Hotkeys in C# so einstellen, dass sie Ereignisse auslösen, auch wenn meine Anwendung nicht im Fokus ist?
Legen Sie globale Hotkeys mit C# fest, um Ereignisse auszulösen (auch wenn die App nicht im Fokus ist)
In diesem Artikel wird beschrieben, wie Sie globale Hotkeys in C# festlegen, sodass Ereignisse auch dann ausgelöst werden können, wenn die Anwendung nicht im Fokus ist.
Frage:
Erfassen Sie Tastenanschläge, wenn das Programm nicht im Fokus ist (z. B. Strg Alt J), um Ereignisse innerhalb des Programms auszulösen.
Lösung:
Warnung: Dieser Code löst keine Ereignisse in der Konsolenanwendung aus. Bitte verwenden Sie das WinForms-Projekt, um die Ereignisfunktionalität zu implementieren.
Benutzerdefinierte Tastatur-Hook-Klasse:
<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>
Fensterklasse für die Ereignisbehandlung:
<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>
Verwendungsbeispiel:
<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>
Hinweis:
(ModifierKeys)1
, (ModifierKeys)2
usw. korrekt konvertieren. Das obige ist der detaillierte Inhalt vonWie kann ich globale Hotkeys in C# so einstellen, dass sie Ereignisse auslösen, auch wenn meine Anwendung nicht im Fokus ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!