C#で,マウスとキーボードのロギング

マスターの活動状況をプログラムからモニタするために,マウスおよびキーボードの入力情報を取得しようと思いました.
結果をいうと,CodeProject - For those who codeにそのままコードがProcessing Global Mouse and Keyboard Hooks in C# - CodeProject に掲載されていました.
日本語入力もやってみました.どのキーを押したかは問題なく拾えていました.

何やっているか

どうやってイベントを取得しているかはhttp://www.ailight.jp/BBS/Detail.aspx?Header_ID=1784に説明があります.そこから引用すると:

  • Windowsだとグローバルフックという仕組みがある.
  • その仕組みは,SetWindowsHookExに渡されたhInstanceを使いdllを識別,そのdllを各プロセスに注入する.つまりnativeなコードじゃなきゃだめ.
  • ただしWH_KEYBOARD_LLとWH_MOUSE_LLは元スレッドのコンテキストで呼び出される,つまりManaged コードでも取得できる.

未確認, セキュリティソフトウェアなどに引っかからないか?

素のWindows XP SP3では何も警告が出ませんでしたが,キーボードイベントを拾う動作はセキュリティ関連ソフトに警告を出させるかもしれません.