ホームページ >バックエンド開発 >C++ >Win32 API を使用して C# でグローバル ホットキーを設定する方法

Win32 API を使用して C# でグローバル ホットキーを設定する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 05:36:13914ブラウズ

How to Set Global Hotkeys in C# Using Win32 API?

C# グローバル ホットキー設定ガイド

グローバル ホットキーを使用すると、プログラムがフォーカスされていないときでもキーストロークをキャプチャできます。これは、ショートカット キーを実装したり、キーの組み合わせによってトリガーされる特定のアクションを実行したりする場合に便利です。以下は、C# を使用してグローバル ホットキーを設定する詳細な手順です。

ホットキー処理クラスを作成します

まず、ホットキーの登録とキャプチャを処理するための KeyboardHook という名前のクラスを作成します。

<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>

ホットキーの登録

KeyboardHook クラスをインスタンス化し、その RegisterHotKey メソッドを使用して、目的のホットキーの組み合わせを登録します。たとえば、Ctrl、Alt、F12 キーをホットキーとして登録するには:

<code class="language-csharp">hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);</code>

ホットキー イベントの処理

ホットキーが押されたときにコードを実行するには、クラス KeyboardHookKeyPressed イベントをサブスクライブします:

<code class="language-csharp">hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);</code>

イベント ハンドラーでは、必要なアクションやロジックを実行できます。

ログアウトホットキー

メモリ リークを防ぐため、プログラムが終了するとき、またはホットキーが不要になったときは、必ずホットキーをログアウトしてください。

<code class="language-csharp">hook.Dispose();</code>

重要なヒント

  • この手法には、コンソール アプリケーション プロジェクトではなく、Windows フォーム プロジェクトが必要です。
  • 適切な同期メカニズムのないマルチスレッド環境では、NativeWindow クラスを使用しないでください。
  • RegisterHotKey 機能 アプリケーションごとにホットキーの組み合わせは 256 個までに制限されています。

以上がWin32 API を使用して C# でグローバル ホットキーを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。