C#을 사용하여 이벤트를 트리거하는 전역 단축키 설정(앱이 초점에 있지 않은 경우에도)
이 문서에서는 애플리케이션에 포커스가 없는 경우에도 이벤트가 트리거될 수 있도록 C#에서 전역 단축키를 설정하는 방법을 설명합니다.
질문:
프로그램에 초점이 없을 때(예: Ctrl Alt J) 키 입력을 캡처하여 프로그램 내에서 이벤트를 트리거합니다.
해결책:
경고: 이 코드는 콘솔 애플리케이션에서 이벤트를 실행하지 않습니다. 이벤트 기능을 구현하려면 WinForms 프로젝트를 사용하세요.
사용자 정의 키보드 후크 클래스:
<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>
이벤트 처리를 위한 창 클래스:
<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>
사용 예:
<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>
참고:
(ModifierKeys)1
, (ModifierKeys)2
등을 사용하여 수정자 키를 올바르게 변환했는지 확인하세요. 위 내용은 내 응용 프로그램이 포커스에 있지 않은 경우에도 이벤트를 트리거하도록 C#에서 전역 단축키를 설정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!