概要
PowerShellを用いて、自動画面ロック(スクリーンセーバー起動)を防止するスクリプトを作成し、動作を確認した。
背景と目的
PC2台を同時に使用しているのだが、一方の作業中にもう一方のPCがロックしてしまい、ロック解除を1日に何回も行わなければならい状況に遭遇した。しかも、ロックまでの時間変更が許されない状況にある。そこで、ロックされないように、疑似的にキーを押すスクリプトを作成することにした。
詳細
0.使用条件
スクリプトを動かすためのいくつかの条件がある。 以下の条件をクリアするようにスクリプトを作成する。
- PCに新たにプログラムを入れてはいけない
- 管理者権限がなくても実行できる
1.仕様
PCに新たにソフトウェアを入れてはいけないため、PCにあらかじめ入っている環境を用いる必要がある。Windows10のPCを使用しているので候補となるのは、
- PowerShellを使用する
- VBScript
などであるが、PowerShellをあまり使用したことがないので、ものは試しでPowerShellを用いることにする。
管理者権限がなくても使用できるかについては、
https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750
等を参考に、実行できる方法を用いる。
2.スクリプト作成
作成したスクリプトが以下。 基本的な動きとしては、
- ロックまでの無操作時間に満たない一定時間、何もせず待つ
- ユーザー操作によってマウス位置が変わっているか調べる
- 変わっていなかったら、無操作と判断して、キーストロークを送り、無操作時間をリセットする
- 変わっていたら、ユーザーが操作をしていると判断して、操作と干渉しないように、キーストロークは送らない
という感じ。
# アセンブリのロード Add-Type -AssemblyName System.Windows.Forms # マウス座標初期値 $px = [System.Windows.Forms.Cursor]::Position.X $py = [System.Windows.Forms.Cursor]::Position.Y while (1) { # 一定時間待つ Start-Sleep -s 60 * 3 # マウスの座標を調べる $x = [System.Windows.Forms.Cursor]::Position.X $y = [System.Windows.Forms.Cursor]::Position.Y # 変わっていなかったらキーを押す if (($x -eq $px) -and ($y -eq $py)) { [System.Windows.Forms.SendKeys]::SendWait("%") } # マウス位置を記憶しておく $px = $x $py = $y }
参考
3.動作確認
動作を確認したところ、時間を経過してもロックされずに済んだ。しかしながら、本来自動ロックはセキュリティのために設定しているものなので、PCの前を離れる場合は、自分でロックするようにする。
まとめと今後の課題
自動画面ロック(スクリーンセーバー起動)を防止するスクリプトを作成できた。ひとまずこれでロック解除回数が減らせそう。いずれは、在席センサなどを用いて、画面ロック動作を制御できると、手間も減ってセキュリティも確保できると思われる。