【AutoHotkey】スクリーンセーバー キャンセラー

AutoHotkeyで作成した 自動でカーソルが微妙に動かすことでスクリーンセーバーを抑止していたアプリ。

Windowsの仕様が変わったのか、ONにしているのにスクリーンセーバーが動いていて残念なことに。

 

【Windows】動きが勝手に変わった

 

 

 

解せん。

表面的な対応ごときでは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ではレジストリに簡単にアクセスできる。

 

■読み出し

RegRead, OutputVar, RootKey, SubKey [, ValueName]
  • OutputVar:結果を格納する変数。
  • RootKey:今回の場合HKEY_CURRENT_USERになる。HKCUでもOK。
  • SubKey:サブキーのパス。今回の場合Control Panel\Desktop
  • ValueName:キーの「名前」。今回の場合SCRNSAVE.EXE

 

■追加

RegWrite, ValueType, RootKey, SubKey [, ValueName, Value]
  • ValueType:今回の場合REG_SZ
  • RootKey、SubKey、ValueNameは読み出しの時と同じ。
  • Value:スクリーンセーバーのフルパス。今回の場合C:\Windows\system32\Ribbons.scr

 

■削除

RegDelete, RootKey, SubKey [, ValueName]
  • RootKey、SubKey、ValueNameは読み出しの時と同じ。
    ValueNameを省略するとサブキーが全部削除される。とても危ない。

 

 

という感じなので、チェックボックスのON/OFFでイベントを発生させてやる。

 

Gui, Add, Text, x20 y10 w150 h12, スクリーンセーバー キャンセラー
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

頻繁に使わなかったり、定数化したら文字列が逆に長くなったりする場合は そのまま書いちゃう俺スタイル。

あと気分(何

 

カテゴリー: PC, ソフトウェア, 技術的 タグ: , ,  [パーマリンク]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です