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 中国語 Web サイトの他の関連記事を参照してください。