ホームページ >バックエンド開発 >C++ >アプリケーションがフォーカスされていない場合でもイベントをトリガーするように C# でグローバル ホットキーを設定するにはどうすればよいですか?

アプリケーションがフォーカスされていない場合でもイベントをトリガーするように C# でグローバル ホットキーを設定するにはどうすればよいですか?

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

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>

注:

  • 使用例では、Control、Alt、F12 キーの組み合わせがホットキーとして登録されています。
  • (ModifierKeys)1(ModifierKeys)2 などを使用して修飾キーを正しく変換してください。

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

以上がアプリケーションがフォーカスされていない場合でもイベントをトリガーするように C# でグローバル ホットキーを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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