ホームページ >バックエンド開発 >C++ >C# でグローバル ホットキーをキャプチャする方法?

C# でグローバル ホットキーをキャプチャする方法?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-24 05:27:08571ブラウズ

How to Capture Global Hotkeys in C#?

C# でのグローバル ホットキーのキャプチャ

C# では、プログラムにフォーカスがない場合でもキーストロークをキャプチャするには特別な処理が必要です。この記事では、他のウィンドウがアクティブな場合でもプログラムがキーの組み合わせに応答できるように、グローバル ホットキーを設定するプロセスについて説明します。

プラットフォーム呼び出しを使用する

Windows オペレーティング システムと対話するために、C# はプラットフォーム呼び出し (DllImport) を使用します。次の DLL 関数はホットキーの設定に不可欠です:

  • RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk): Windows にホットキーを登録します。
  • UnregisterHotKey(IntPtr hwnd, int id): Windows のホットキーの登録を解除します。

キーボードフッククラスの作成

グローバル ホットキーを処理するには、IDisposable を継承する KeyboardHook クラスを作成します。

<code class="language-csharp">public sealed class KeyboardHook : IDisposable
{
    // ...
}</code>

このクラスでは、ホットキー メッセージを受信するためにネストされた Window クラスを作成する必要があります:

<code class="language-csharp">private class Window : NativeWindow, IDisposable
{
    // ...
}</code>

ホットキーの登録

ホットキーを登録するには、KeyboardHook クラスの RegisterHotKey メソッドを使用します。

<code class="language-csharp">public void RegisterHotKey(ModifierKeys modifier, Keys key)
{
    // ...
}</code>

このメソッドは、内部カウンター (_currentId) をインクリメントし、指定された修飾子とキーを使用して Windows にホットキーを登録します。

ホットキーの押下に応答します

ホットキーが押されると、イベント ハンドラー KeyPressed が起動されます。メイン アプリケーションでこのイベントをサブスクライブし、ホットキーがトリガーされたときに必要なアクションを実行できます。

使用例

この例では、押されたキーを表示するラベル付きのフォームが作成されます。

<code class="language-csharp">public partial class Form1 : Form
{
    // ...
}</code>

フォームのコンストラクターで、KeyboardHook インスタンスを作成し、ControlAlt、および F12 のホットキーの組み合わせを登録します。

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

ホットキーが押されると、hook_KeyPressed イベント ハンドラーが呼び出され、修飾子と押されたキーでラベルが更新されます。

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

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