AutoHotkeyで作成した 自動でカーソルが微妙に動かすことでスクリーンセーバーを抑止していたアプリ。
Windowsの仕様が変わったのか、ONにしているのにスクリーンセーバーが動いていて残念なことに。
解せん。
表面的な対応ごときではWindowsの「仕様」を突破できないということかw
じゃ、正攻法(?)で行くか。
まず、スクリーンセーバーの設定はどこにあるか。
レジストリだろう。
レジストリはWindowsの設定の要。
下手にイジったりするとWindowsが死亡する可能性があるので やるなら自己責任で。
というわけで、スクリーンセーバーのファイル名で検索をかけてみる。
使っているのはリボン(Ribbons.scr)。
ヒットした。
HKEY_CURRENT_USER\Control Panel\Desktop
にあった。
名前がSCRNSAVE.EXE
REG_SZ(=文字列型)
データはC:\Windows\system32\Ribbons.scr
とスクリーンセーバーのフルパス
ちなみにその1つ上にあるScreenSaveTimeOut
は起動までの秒数。
設定画面では分単位なのに、何故秒で管理してるんだろう?
90とか入れたら設定画面の方どうなるんだろうw
さて、話は逸れたけど、設定画面の方でスクリーンセーバーを(なし)にしてみる。
レジストリの方は・・・?
SCRNSAVE.EXEが消えた。
それだけ?
ScreenSaveTimeOut残ってるんだけど良いの?
ひとまずレジストリのバックアップを取っておきましょう。これ重要。
便利である反面 危険なんだけど、AutoHotkeyではレジストリに簡単にアクセスできる。
■読み出し
- OutputVar:結果を格納する変数。
- RootKey:今回の場合HKEY_CURRENT_USERになる。HKCUでもOK。
- SubKey:サブキーのパス。今回の場合Control Panel\Desktop。
- ValueName:キーの「名前」。今回の場合SCRNSAVE.EXE。
■追加
- ValueType:今回の場合REG_SZ。
- RootKey、SubKey、ValueNameは読み出しの時と同じ。
- Value:スクリーンセーバーのフルパス。今回の場合C:\Windows\system32\Ribbons.scr。
■削除
- RootKey、SubKey、ValueNameは読み出しの時と同じ。
ValueNameを省略するとサブキーが全部削除される。とても危ない。
という感じなので、チェックボックスのON/OFFでイベントを発生させてやる。
RegRead, regOut, HKCU, %REG_KEY_PATH%, %REG_KEY_NAME%
If (regOut == "") {
Gui, Add, CheckBox, x75 y+5 h30 w60 Checked GchkEvent VisChecked, 実行
} Else {
Gui, Add, CheckBox, x75 y+5 h30 w60 GchkEvent VisChecked, 実行
}
Gui, Show
Return
; チェックボックスON/OFF時のイベント
chkEvent:
Gui, Submit, NoHide
If (isChecked) {
RegDelete, HKCU, %REG_KEY_PATH%, %REG_KEY_NAME%
} Else {
RegWrite, REG_SZ, HKCU, %REG_KEY_PATH%, %REG_KEY_NAME%, %SS_PATH%
}
Return
こんな感じかな?
チェックが入っている(=キャンセラーON)でスクリーンセーバーのパスを削除、
チェックが入っていない場合はスクリーンセーバーを起動させるためにパスを設定。
定数化してあったり、してなかったりと微妙なソースだw
頻繁に使わなかったり、定数化したら文字列が逆に長くなったりする場合は そのまま書いちゃう俺スタイル。
あと気分(何