はじめに
PowerShellでマウスカーソル動かしたくなったのでやってみる。
(スクリプト試してるときにカーソルが暴走して止められなくなったらCtrl+Breakで中断できる)
1. .NETクラスの追加
コマンドレットにはカーソルを動かすコマンドが無いので、System.Windows.Formsクラスを追加。
Add-Type -AssemblyName System.Windows.Forms
2. カーソルの位置の取得
[Windows.Forms.Cursor]::Position
座標のXとYの値をいじればカーソルが動く。
3. カーソルの座標の加減算
これだとカーソルが動かない
Add-Type -AssemblyName System.Windows.Forms
$Cursor = [Windows.Forms.Cursor]
for($i=0; $i -lt 3; $i++){
$Cursor::Position.X += 10
$Cursor::Position.Y += 10
#検証用
Write-Host "PositonX: " $Cursor::Position.X
Write-Host "PositonY: " $Cursor::Position.Y
Write-Host ""
}
座標も変わってない
PositonX: 1466
PositonY: 269
PositonX: 1466
PositonY: 269
PositonX: 1466
PositonY: 269
これは動く
#カーソルの位置取得
Add-Type -AssemblyName System.Windows.Forms
$Cursor = [Windows.Forms.Cursor]
for($i=0; $i -lt 3; $i++){
$Position = $Cursor::Position
$Position.x += 10
$Position.y += 10
$Cursor::Position = $Position
#検証用
Write-Host "PositonX: " $Cursor::Position.X
Write-Host "PositonY: " $Cursor::Position.Y
Write-Host ""
}
座標も変わっている
PositonX: 1479
PositonY: 265
PositonX: 1489
PositonY: 275
PositonX: 1499
PositonY: 285
どのくらい動かすかにランダム性を持たせるなら、候補の数値を配列にしてGet-Randomに渡して数値を出すといいかも。
-1, 1 | Get-Random
おわりに
$Cursor::Position
のX座標、Y座標を変えるところをループ処理にすればカーソルを滑らかに動かせる。
少しアレンジすればカーソルに高速で反復横跳びさせることもできるはず。(使い道はないけど)