mieki256's diary



2022/08/10(水) [n年前の日記]

#2 [python][windows] Windows用スクリーンセーバの呼び出し動作をPythonで確認

Windows用スクリーンセーバを、Python を使って作ってみたい。

環境は、Windows10 x64 21H2 + Python 3.8.10 x64。

まずは、Windows用スクリーンセーバが呼び出される時、どんなオプションが渡されているのかを念のために調べておきたい。そこで、渡されたオプションを、デスクトップ上のテキストファイルに追記していくだけの Pythonスクリプトを書いてみた。

_01_scrsavchk.py
import os
import sys
import datetime
import time


def main():
    desktop_dir = os.path.expanduser('~/Desktop')
    log_file = os.path.join(desktop_dir, "temp.log.txt")
    dt_now = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")

    print("Screensaver option check")
    print("%s" % dt_now)
    print("look %s" % log_file)

    kind = "none"
    hwnd = 0
    if len(sys.argv) >= 2:
        s = sys.argv[1][0:2].lower()
        if s == "/s":
            # full screen
            kind = "fullscreen"
        elif s == "/c":
            # config / settings
            kind = "config"
        elif s == "/p":
            # preview
            kind = "preview"
            hwnd = int(sys.argv[2])

    with open(log_file, 'a') as f:
        f.write("[%s] %s , [%s]\n" % (dt_now, kind, " ".join(sys.argv)))

    time.sleep(2)


if __name__ == '__main__':
    main()

このスクリプトファイルを、PyInstaller を使ってexe化する。
pyinstaller --onefile --noupx 01_scrsavchk.py
distディレクトリに、01_scrsavchk.exe というexeファイルが作られた。

01_scrsavchk.exe を、01_scrsavchk.scr にリネーム。Windows用スクリーンセーバの実行ファイル、.scr の実体は、拡張子を .scr にリネームした .exeファイルなので…。

今回、Python 3.8.10 x64 (64bit版) でexe化したので…。
ということで、01_scrsavchk.scr を、C:\Windows\System32\ 以下にコピーした。

スクリーンセーバとして選んでみる。
スクリーンセーバ一覧の中に、01_scrsavchk という種類が増えている。これを選ぶと、DOS窓が開いて、2秒ほど経ったら閉じる。「設定」「プレビュー」ボタン等も押してみて様子を伺う。

デスクトップに、temp_log.txt というテキストファイルができているはず。中身を確認。
[2022/08/10 19:51:13] preview , [C:\WINDOWS\system32\01_scrsavchk.scr /p 68114]
[2022/08/10 19:51:21] config , [C:\WINDOWS\system32\01_scrsavchk.scr /c:330168]
[2022/08/10 19:51:24] preview , [C:\WINDOWS\system32\01_scrsavchk.scr /p 68114]
[2022/08/10 19:51:29] fullscreen , [C:\WINDOWS\system32\01_scrsavchk.scr /s]
[2022/08/10 19:51:32] preview , [C:\WINDOWS\system32\01_scrsavchk.scr /p 68114]
[2022/08/10 19:51:41] preview , [C:\WINDOWS\system32\01_scrsavchk.scr /p 68114]
これで、Windows10 がどんなオプションをつけてスクリーンセーバを呼び出しているのかが分かる。

そんなわけで、巷の解説通り、Windows用スクリーンセーバは、以下の3種類のオプションを渡した状態で実行されることが分かった。
また、「設定」「プレビュー」ボタンを押して実行・終了した直後、すぐさま /p xxxxx を渡して実行されていることも分かった。

Windows用のスクリーンセーバは多重起動を禁止するように作るべしと言われているけど、このあたりの呼び出しタイミングがシビア、ということだろうか…。それとも、既にフルスクリーンで起動してるのに、再度実行されてしまう場面もあり得るのだろうか…。

以上です。

過去ログ表示

Prev - 2022/08 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project