.NETでマウスとキーボードのメッセージをフックする方法?Win32NETがお手伝いします

.NETでマウスとキーボードのメッセージをフックする方法?Win32NETがお手伝いします

Win32NETはWin32APIを.NETでラップしたクラスライブラリです

最終更新 2022/01/20 14:12
明月心技术学堂
読了目安 2 分
カテゴリ
.NET
タグ
.NET C# キーボードフック マウスフック

Win32NET は Win32API の .NET 向けラッパークラスライブラリです。以下を含みます:

  1. 一般的な Win32 API の .NET ラッパー
  2. マウス、キーボード、ホットキーのフックモジュール
  3. キーボード入力シミュレーション(各種文字、異なる言語の文字に対応)、マウスクリック・移動・スクロールなどの操作シミュレーション
  4. システムハードウェア情報の取得

Win32Net ライブラリの使用方法:NuGet パッケージマネージャーで「Win32Net」を検索してください。

Install-Package Win32Net -Version 1.2.0

または、直接参照を追加します。

<PackageReference Include="Win32Net" Version="1.2.0" />

マウスフックの使用方法:

まずマウスフックオブジェクトをインスタンス化し、マウスイベントのコールバックメソッドを定義して、監視を開始します。マウス情報の監視が不要になったら、監視を停止できます。

win32.Hooks.MouseHook mouseHook = new Hooks.MouseHook(); // マウスフックオブジェクトをインスタンス化
mouseHook.LeftDown += MouseHook_LeftDown; // マウス左ボタン押下イベントのリスナーコールバックメソッド
mouseHook.Start(); // 監視開始
mouseHook.Stop(); // 監視停止

キーボードフックの使用方法:

キーボードフックもマウスフックと同様に使用します。まずキーボードフックオブジェクトをインスタンス化し、キーボードイベントのコールバックメソッドを定義して、監視を開始します。キーボード情報の監視が不要になったら、監視を停止できます。

Win32.Hooks.KeyboardHook keyboardHook = new Win32.Hooks.KeyboardHook();
  keyboardHook.OnKeyUp += KeyboardHook_OnKeyUp;
  keyboardHook.Start();
  keyboardHook.Stop();

グローバルホットキーの登録方法

// WPF ウィンドウハンドル
// IntPtr hwnd = new WindowInteropHelper(WPFWindowオブジェクト).Handle;
// WinForms ウィンドウハンドル
 IntPtr hwnd = this.Handle;
  // ホットキーオブジェクトをインスタンス化。メッセージ受信用のハンドルが必要
 Win32.Hooks.SystemHotKey systemHotKey = new Win32.Hooks.SystemHotKey(hwnd);
// ホットキーID、一意である必要あり
 int hotKeyId = 5000;
// Alt+Q ホットキーを登録
systemHotKey.AddHotKey(hotKeyId, Win32.KeyModifiers.Alt, Keys.Q,
 () =>
 {
 MessageBox.Show("Alt+Q ホットキーが押されました");
 }
);
// ESC ホットキーを登録
 systemHotKey.AddHotKey(hotKeyId + 1, Win32.KeyModifiers.None, Keys.Escape,
 () =>
 {
 this.Close();
 }
 );

システムハードウェア情報の取得方法

SystemInfo systemInfo = new SystemInfo();
richTextBox1.AppendText("オペレーティングシステム:" + systemInfo.operatingSystem.Caption + "\n");
richTextBox1.AppendText("システムID:" + systemInfo.operatingSystem.SerialNumber + "\n");
richTextBox1.AppendText("OSプラットフォーム:" + systemInfo.operatingSystem.OSLevel + "\n");
richTextBox1.AppendText("システムインストール日時:" + systemInfo.operatingSystem.InstallDate + "\n");
richTextBox1.AppendText("システム最終起動日時:" + systemInfo.operatingSystem.LastBootUpTime + "\n");
richTextBox1.AppendText("システム時刻:" + systemInfo.operatingSystem.LocalDateTime + "\n");
richTextBox1.AppendText("CPU:" + systemInfo.processor.Name + "\n");
richTextBox1.AppendText("CPUメーカー:" + systemInfo.processor.Manufacturer + "\n");
richTextBox1.AppendText("CPUシリアル番号:" + systemInfo.processor.SerialNumber + "\n");
richTextBox1.AppendText("物理メモリ:" + systemInfo.memory.TotalPhysicalMemory + "\n");
さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む