Skip to content
Blog
Go back

WH_KEYBOARD_LLの挙動調査と画面ロックの検知方法

WH_KEYBOARD_LLとユーザー権限#

  • Windows APIのフックという機能のひとつにWH_KEYBOARD_LLがある
    • 低レベルのキー入力イベントを監視したり奪取したりできる
  • 標準権限で起動したアプリにはWH_KEYBOARD_LLで取得できないものがある
    • 管理者権限で起動したアプリへのキー入力とか
  • これのせいで特にロック画面での挙動が厄介になる
    • Win+Lで画面をロックすると、ロック画面に遷移してからキーリリースが発生するので、WinとLを離したことがアプリ側に伝わらないみたい
  • アプリを管理者権限で実行すれば問題は解決するけど、それはあまりやりたくない
    • セキュリティとか信用とかの問題があるので
  • ロック画面に遷移したことが分かるなら、そのタイミングでキーを離したことにすれば良いのでは?

画面ロックの検知#

  • Windowsでは、ロック画面の出入などのタイミングでウインドウにメッセージを送ってもらうようにすることができる
    • wtsapi32.hで宣言されている
    • WTSRegisterSessionNotification(hWnd, NOTIFY_FOR_THIS_SESSION)で登録
    • WTSUnRegisterSessionNotification(hWnd)で解除
  • すると、“セッション状態の変更”のさいにWM_WTSSESSION_CHANGEメッセージが来るようになる
    • 画面がロックされたときはwParamWTS_SESSION_LOCKになる

参考資料#