特殊キーが押されているかの状態を取得する

プログラム

マウス操作を行う自動化のスクリプトを途中で中断したい時があり、特殊キーを押した状態を判定したく結構昔から調べており探せていなかったが、ふと下記のワードで引っかかった情報で解決できたのでメモっておく。

<powershell キー フック>

取りあえずSHIFTキーとCTRLキーが同時に押されるとスクリプトを停止するサンプル。

# Microsoft.VisualBasicアセンブリを有効化
[void][System.Reflection.Assembly]::Load( `
    "Microsoft.VisualBasic, Version=8.0.0.0, `
    Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

$code = @'
    [DllImport("user32.dll")]
    public static extern IntPtr GetAsyncKeyState(long vKey);
'@
Add-Type $code -Name Utils -Namespace Win32

while ($true) {
    $shift = [Win32.Utils]::GetAsyncKeyState(16)
    $ctrl = [Win32.Utils]::GetAsyncKeyState(17)
    if ($shift -ne 0 -and $ctrl -ne 0) {  
        break
    } 
    Start-Sleep 1
}

GetAsyncKeyStateの引数に関してはキーコードで検索すれば一覧がいくらでもあるはず
<キーコード>

コメント