mieki256's diary



2026/01/03() [n年前の日記]

#1 [python] PythonでWindows用スクリーンセーバを作成してみた

Windows11 x64 25H2上で、Python 3.10.10 を使ってWindows用スクリーンセーバを作成してみた。

せっかくだから github にアップロードしておいた。

_mieki256/pywinscr: Pythonで作ったWindows用スクリーンセーバのサンプル

2台のPC、Windows11 x64 25H2 と Windows10 x64 22H2 で動作確認したので、おそらく動くのではないかなあ…。スクリーンセーバ自体は、画面の中でボールが跳ね回る、よくあるアレ。サンプルなので。


以前も Python でWindows用スクリーンセーバを作ったことがあるのだけれど…。

_mieki256's diary - pygameでWindows用スクリーンセーバを作る

以前の版は、pygame 1.9.x を使わないと作れなかった。pygame 1.9.x は Python 3.8 までの対応なので、最近の Python では利用できない。

今回の版は、フルスクリーン表示を pygame-ce 2.5.6、設定画面を tkinter、プレビューモードを pywin32 311 + pillow 12.1.0 で作っているので、このサンプルを改造していけば最近のバージョンの Python でもスクリーンセーバを作れるのではないかな…。たぶん。

期待した結果は得られなかった :

以前作った版は、プレビューモードにしろ、設定モードにしろ、フルスクリーン表示モードにしろ、立ち上がってくるまで数秒かかってしまってこれでは使えんわと思ったのだけど。今回、pywin32 を使ってプレビューモードの処理を行うことで、起動時間が短くなってくれないかなあと期待しながら作業してた。

全然ダメだった。相変わらず起動に数秒かかる。話にならない。

.scr はSSD上に置いてあるのにこれだけ時間がかかるのだから、これがもしHDD上に置いてあったら目も当てられない状態になるのではないか…。

起動が遅い原因 :

起動が遅い原因は、おそらくだけどファイルの展開に時間がかかっているせいではなかろうか。

Nuitka というツールを使うと Pythonスクリプトをexeファイルにできるけれど、1ファイルのexeに変換してソレを実行した場合、一旦 テンポラリフォルダ %temp% 内にファイル群を展開して、そこから実際の処理が始まる。

今回作成した .scr を実行した際の %temp% 内を覗いてみたら、1010ファイル、40フォルダが展開されていた。「スクリーンセーバーの変更」ウインドウで何かしら操作をするたびに、1010ファイル、40フォルダも展開して、しかもプロセスが終了するたびにそれらのファイル群を毎回削除しているのだから、そりゃ起動時間が遅くて当然だろう…。

Pythonを使えば比較的誰でも簡単にスクリプトが書けるので、Pythonでスクリーンセーバを作れたら楽になるだろうなと思っていたけれど…。Pythonスクリプトをexe化する仕組み自体に問題(?)があるなと…。

Windows用のスクリーンセーバは、exeファイルを生成することが前提のプログラミング言語で作らないと使い物にならない気がしてきた。

そもそもスクリーンセーバって不要 :

もっとも、今時スクリーンセーバを使う機会自体がそもそも無いだろうし、自分は無駄な実験してるなあ、とも思ってるけど…。

  • Windows10/11 は一定時間操作しないとディスプレイをサスペンド状態に移行する機能がついている。フツーはソレを使う。省エネを考えたらCPUをぶん回してアニメーションを表示し続けること自体がおかしい。まずはディスプレイを消しましょう、となるよな…。
  • ディスプレイの焼き付き防止云々もブラウン管を使ってた時代の話だし…。そもそもディスプレイを消しちゃえば焼き付きもへったくれもない。

スクリーンセーバの必要性なんて現代では存在しない…。リアルタイム描画を行うCGアート作品としての価値しかない。

ただ、それはそれとして、今ならスクリーンセーバぐらい簡単に作れないのかな? と疑問が湧いて、こうして実験してしまうという…。残念なことに今でも簡単には作れないっぽい。いや、一応簡単に作れるけれど、それはそれで何かしら制限というか、不便なところが出てきてしまう。どうしても作りたかったら、C/C++ で作るしかないのかなあ…。

以上です。

過去ログ表示

Prev - 2026/01 - 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