(AI問答)マウスが動いているときは実行しない powershell もしくは bat コマンドを書いて
A1.ChatGPT 3.5 (OpenAI free)
マウスが動いている間は特定のスクリプトが実行されないようにするには、PowerShellスクリプトで実行できます。以下に、マウスが一定時間動いていない場合にのみスクリプトを実行するPowerShellスクリプトの例を示します。
このスクリプトは、指定されたインターバルでマウスの位置をチェックし、マウスの位置が変わらなかった場合に特定のコマンドを実行します。
# インターバルの設定(秒単位)
$checkInterval = 1
# マウスが一定時間動いていない場合の待機時間(秒単位)
$idleTimeThreshold = 5
# 最後のマウス位置を保持する変数
$lastMousePosition = [System.Windows.Forms.Cursor]::Position
# 最後のマウス移動時刻を保持する変数
$lastMouseMoveTime = Get-Date
# 無限ループ
while ($true) {
# 現在のマウス位置を取得
$currentMousePosition = [System.Windows.Forms.Cursor]::Position
# マウス位置が変わっているかどうかを確認
if ($currentMousePosition -ne $lastMousePosition) {
# 変わっている場合、最後のマウス移動時刻を更新
$lastMouseMoveTime = Get-Date
$lastMousePosition = $currentMousePosition
}
# マウスが一定時間動いていないかどうかを確認
$idleTime = (Get-Date) - $lastMouseMoveTime
if ($idleTime.TotalSeconds -ge $idleTimeThreshold) {
# ここに実行したいコマンドを記述
Write-Host "マウスが動いていないのでコマンドを実行します。"
# 例: Write-Output "マウスが動いていない"
# 実行したいコマンドをここに追加
break
}
# 指定したインターバルの間待機
Start-Sleep -Seconds $checkInterval
}
このスクリプトでは、次のことを行います:
`System.Windows.Forms`を使用してマウスの現在位置を取得します。
一定のインターバル(`$checkInterval`)でマウス位置をチェックします。
マウスが動いていない時間が指定した閾値(`$idleTimeThreshold`)を超えた場合にコマンドを実行します。
このスクリプトを実行するためには、PowerShellでWindowsフォームを使用できるようにするため、事前に`Add-Type -AssemblyName System.Windows.Forms`を実行しておく必要があります。スクリプトの冒頭に以下の行を追加してください。
Add-Type -AssemblyName System.Windows.Forms
バッチファイルではマウスの位置を直接チェックする方法がないため、PowerShellスクリプトの方が適しています。
A2.Google Bard
マウスが動いているときは実行しない PowerShell コマンド
マウスが動いているかどうかを判定し、動いている場合は処理を実行しない PowerShell コマンドは以下の通りです。
PowerShell
While ($true) {
$isMouseActive = (Get-Input -Mouse -EventType Click | Where-Object { $_.State -eq "Pressed" })
if (!$isMouseActive) {
# マウスが動いていない場合、ここに処理を記述
Write-Output "マウスが動いていません。"
break
}
Start-Sleep -Milliseconds 100
}
このコードは、Get-Input コマンドレットを使用してマウスのイベントを取得します。 -EventType Click オプションは、クリックイベントのみを監視するように指定します。 Where-Object コマンドレットを使用して、State プロパティが "Pressed" のイベントのみを抽出します。
$isMouseActive 変数にイベントの有無を格納し、if ステートメントを使用してマウスが動いていない場合のみ処理を実行します。
マウスが動いているときは実行しない BAT ファイル
マウスが動いているかどうかを判定し、動いている場合は処理を実行しない BAT ファイルは以下の通りです。
コード スニペット
@echo off
:loop
setlocal EnableDelayedExpansion
for /f "tokens=2 delim=" %%a in ('Get-Input -Mouse -EventType Click ^| Where-Object { $_.State -eq "Pressed" }') do (
if %%a == Pressed (
goto endloop
)
)
rem マウスが動いていない場合、ここに処理を記述
echo マウスが動いていません。
timeout /t 100
goto loop
:endloop
この BAT ファイルは、Get-Input コマンドと for ループを使用してマウスのイベントを取得します。 -EventType Click オプションは、クリックイベントのみを監視するように指定します。 Where-Object コマンドレットを使用して、State プロパティが "Pressed" のイベントのみを抽出します。
ループ内で、setlocal EnableDelayedExpansion コマンドを使用して遅延展開を有効にします。 これにより、ループ内の変数展開が遅延されます。
for ループ内で、Get-Input コマンドの出力を解析し、State プロパティが "Pressed" であるかどうかを確認します。 もし "Pressed" であれば、ループを終了します。
ループ内で、マウスが動いていない場合にのみ処理を実行します。 timeout コマンドを使用して、100ミリ秒待機してからループを繰り返します。
注意事項
上記の例では、クリックイベントのみを監視しています。 キーボードイベントやその他のイベントを監視したい場合は、-EventType オプションを変更する必要があります。
BAT ファイルを使用する場合は、Get-Input コマンドレットが Windows 10 以降でのみ利用可能であることに注意してください。 Windows 8.1 以前の場合は、代替手段として WM_MOUSEMOVE メッセージを監視する必要があります。
その他
上記以外にも、様々な方法でマウスの動きを監視し、処理を制御することができます。 具体的な方法については、以下の情報源を参考にしてください。
A3. Copilot (BingAI MS free)
テレワーク中にマウスを自動で動かすための PowerShell スクリプトを作成することができます。以下の手順に従って試してみてください。
Windowsキー + R を押下して、[ファイル名を指定して実行]ダイアログボックスを開きます。
ダイアログボックスに powershell と入力して OK ボタンをクリックします。
開いた PowerShell の画面に以下のコードをコピーペーストします。
write-host "CTRL + C で止まります"
Add-Type -AssemblyName System.Windows.Forms
while ($true) {
$POSITION = [Windows.Forms.Cursor]::Position
$DX = (Get-Random -Minimum -1 -Maximum 2)
$DY = (Get-Random -Minimum -1 -Maximum 2)
for ($I = 0; $I -lt 30; $I += 1) {
$POSITION.x += $DX
$POSITION.y += $DY
[Windows.Forms.Cursor]::Position = $POSITION
Start-Sleep -Milliseconds 100
}
Start-Sleep -Seconds 10
}
このスクリプトを実行すると、マウスが小刻みに動き続けます。解除するには Ctrl + C キーを同時に押下します。
このスクリプトは、テレワーク中の離席を防ぐために便利です。ただし、テレワーク監視ツールがマウスの移動量を計測している場合は注意してください。12
お役に立てれば幸いです!
結論
あいまいな発言でも心を読み取ってくれるようにはなった模様