2021/02/09(火) [n年前の日記]
#1 [godot] Godot EngineでWindows用のスクリーンセーバを作成してみた
Windows10 x64 20H2 + Godot Engine 3.2.3 x64 で、Windows用のスクリーンセーバを作成してみた。
バイナリは以下。Windows10 x64 20H2 上でしか動作確認していない。32bit版Windows上では動かないのではないかな…。
※ 2021/02/11追記。車のヘッドライトが点灯するようにしてみた。
_driveqp_scrsaver_1.1.zip (12.62MByte)
_driveqp_scrsaver_1.0.zip (12.63MByte)
Godot Engine のプロジェクトファイル群は、一応 github にアップロードしてみた。このまま git clone して使えるのかどうかは分らんけど…。
_mieki256/driveqp_scrsaver: Screensaver for Windows. Created with the Godot engine.
ちなみに、driveqp_scrsaver.exe を実行すれば、スクリーンセーバとして利用しなくても、デモ(?)がフルスクリーンで表示されます。
バイナリは以下。Windows10 x64 20H2 上でしか動作確認していない。32bit版Windows上では動かないのではないかな…。
※ 2021/02/11追記。車のヘッドライトが点灯するようにしてみた。
_driveqp_scrsaver_1.1.zip (12.62MByte)
Godot Engine のプロジェクトファイル群は、一応 github にアップロードしてみた。このまま git clone して使えるのかどうかは分らんけど…。
_mieki256/driveqp_scrsaver: Screensaver for Windows. Created with the Godot engine.
◎ スクリーンショット。 :
インストールの流れや動作画面は、以下のような感じ。
◎ インストール手順。 :
- driveqp_scrsaver_*.zip をダウンロードして、任意の場所に解凍(展開)。
- replace_ini.vbs を実行。driveqp.ini 内のパス指定が、現在フォルダの場所で書き換えられる。
- driveqp.scr と driveqp.ini を、C:\Windows\SysWOW64\ にコピー。(管理者権限が必要)
- Windowsの「スクリーンセーバーの変更」ダイアログを表示して、driveqp を選択。
ちなみに、driveqp_scrsaver.exe を実行すれば、スクリーンセーバとして利用しなくても、デモ(?)がフルスクリーンで表示されます。
◎ 終了方法。 :
以下のいずれかの操作をすれば、スクリーンセーバが終了します。
- ESCキーを叩く。
- マウスクリックする。
- マウスを大きく動かす。
◎ 使用モデルデータについて。 :
モデルデータは、OpenGameArt で公開されている CC0ライセンスのモデルデータを利用させてもらいました。作者様方には感謝です。助かりました。
_Landscape Asset v2 | OpenGameArt.org
_Vehicles Assets pt1 | OpenGameArt.org
_OpenGameArt.org
_Landscape Asset v2 | OpenGameArt.org
_Vehicles Assets pt1 | OpenGameArt.org
_OpenGameArt.org
◎ 余談。 :
先日作成したスクリーンセーバのラッパー、scrsavwr のおかげで、フルスクリーン表示をするプログラムさえ作成してしまえばWindows用のスクリーンセーバとして利用できますよ、という例は一応示せたかなあ、と…。
_mieki256/scrsavwr: Screensaver wrapper on Windows
まあ、フルスクリーン表示をするプログラム側で、キー入力やマウス移動を検出して、自分自身を終了させる処理が必要になりますけど…。
_mieki256/scrsavwr: Screensaver wrapper on Windows
まあ、フルスクリーン表示をするプログラム側で、キー入力やマウス移動を検出して、自分自身を終了させる処理が必要になりますけど…。
[ ツッコむ ]
#2 [prog] VBScriptでiniファイルを書き換える処理を書いてみた
.iniファイル内に書かれたフォルダパス(ディレクトリパス)を、現在フォルダで書き換えたいなと。
エディタで iniファイルを開いて、手作業で書き換えても目的は果たせるけれど、何度も試していると面倒臭い。ここは少しでも自動化したい。
ということで、WSH(VBScript)を使って、.ini ファイルを書き換えられないか試してみたり。環境は、Windows10 x64 20H2。
処理としては、以下のような感じ。
テンプレートファイルは以下。
_template_ini.txt
VBScript は以下。
_replace_ini.vbs
これで、以下のようなファイルを同じフォルダに置いておいて…。
エディタで iniファイルを開いて、手作業で書き換えても目的は果たせるけれど、何度も試していると面倒臭い。ここは少しでも自動化したい。
ということで、WSH(VBScript)を使って、.ini ファイルを書き換えられないか試してみたり。環境は、Windows10 x64 20H2。
処理としては、以下のような感じ。
- スクリプトの置いてあるフォルダパス(カレントフォルダ)を取得。
- iniファイルの元になるテンプレートファイルが存在するか調べる。
- iniファイルがカレントフォルダ内に存在するか探す。
- テンプレートファイルを読み込んで、特定文字列(今回は "[INSTALL_DIR]") をフォルダパスで置換。
- 置換後の内容で、iniファイルを上書き更新。
テンプレートファイルは以下。
_template_ini.txt
fullscreen_bin=[INSTALL_DIR]\driveqp_scrsaver.exe config_bin=wscript [INSTALL_DIR]\driveqp_scrsaver_about.vbs preview_img=[INSTALL_DIR]\driveqp_scrsaver_preview.bmp
VBScript は以下。
_replace_ini.vbs
' スクリーンセーバラッパー scrsavwr 用の ini ファイルを生成するvbs(VBScript)
' フルスクリーン表示用プログラム群が入っているディレクトリ内で実行すると、
' template_ini.txt の内容に従って、パスを反映させたiniファイルを生成する。
'
' Generate an ini file for scrsavwr (screensaver wrapper).
' Run in the directory that contains the full screen program.
' Generate an ini file that reflects the path according to the contents of template_ini.txt.
Option Explicit
Dim objFso
Dim objFile
Dim objDir
Dim cdir
Dim ini_name
Dim template_path
Dim ret
Dim cmdstr
Dim i
Dim s
ini_name = ""
template_path = "template_ini.txt"
set objFso = createObject("Scripting.FileSystemObject")
If Err.Number <> 0 Then
MsgBox "Error : " & Err.Description
WScript.Quit
End If
' Get folder path of the script file
cdir = objFso.getParentFolderName(WScript.ScriptFullName)
' Check exists template file
If objFso.FileExists(template_path) = False Then
MsgBox "Not found : " & template_path, , "Error"
Set objFso = Nothing
WScript.Quit
End If
' Search ini file
Set objDir = objFso.GetFolder(cdir)
For Each objFile In objDir.Files
If Right(objFile.Name, 4) = ".ini" Then
ini_name = objFile.name
End If
Next
If ini_name = "" Then
' Not found ini file
MsgBox "Not found .ini file",, "Error"
Set objFso = Nothing
WScript.Quit
Else
' Found ini file
ret = MsgBox("Found " & ini_name & vbCrLf & "Replace ?", vbYesNo + vbQuestion)
If ret <> vbYes Then
MsgBox "Cancel the process."
Set ret = Nothing
Set objFso = Nothing
WScript.Quit
End If
Set ret = Nothing
End If
' Open template file
Set objFile = objFso.OpenTextFile(template_path)
' Record the contents of the file line by line in an array
i = 0
Do Until objFile.AtEndOfStream
' Extends the size of the array while preserving its contents
redim Preserve lines(i)
' Read one line
cmdstr = objFile.ReadLine
' Replace folder path
lines(i) = Replace(cmdstr, "[INSTALL_DIR]", cdir)
i = i + 1
Loop
objFile.Close
' Export to ini file
Set objFile = objFso.OpenTextFile(ini_name, 2, True)
For Each s In lines
objFile.WriteLine(s)
Next
objFile.Close
MsgBox "Replace " & ini_name
Set objFso = Nothing
Set ObjFile = Nothing
これで、以下のようなファイルを同じフォルダに置いておいて…。
- replace_ini.vbs
- template_ini.txt
- hoge.ini
[ ツッコむ ]
#3 [prog] VBScriptを編集できるヨサゲなエディタは無いものか
VBScriptを編集できるヨサゲなエディタは無いものか…。補完を使いたい…。
一応、今回は、xyzzy (+ basic-mode) で作業してしまったけれど。vbs特有のキーワードに対する補完が使えなくて、不便だなと…。
Visual Studio Code も試してみるか…。
_VBS - Visual Studio Marketplace
なんだかいくつか拡張があるっぽいけど…。どれがいいのやら…。
一応、今回は、xyzzy (+ basic-mode) で作業してしまったけれど。vbs特有のキーワードに対する補完が使えなくて、不便だなと…。
Visual Studio Code も試してみるか…。
_VBS - Visual Studio Marketplace
なんだかいくつか拡張があるっぽいけど…。どれがいいのやら…。
[ ツッコむ ]
#4 [smallbasic] Microsoft Small Basic が起動しない
Windows10 x64 20H2 + Microsoft ストア経由で Small Basic 1.3 をインストールしてみた。
しかし、起動してくれない。
イベントビューアで見たらエラーが出ていた。
ファイル名からして x86 版のように見えるのだけど、64bit版Windows の C:\Program Files\ にインストールされているように見える。そこは 64bit版のアプリをインストール場所ではないのだろうか。これっていいのだろうか…? *1
それとも、自分のメインPCの CPU は AMD Ryzen 7 1700 だから…? Intel製CPUじゃないと動かないアプリなのか…?
しかし、起動してくれない。
イベントビューアで見たらエラーが出ていた。
アプリケーション:SB.exe フレームワークのバージョン:v4.0.30319 説明: ハンドルされない例外のため、プロセスが中止されました。 例外情報:例外コード e0434352、例外アドレス 00007FFF2C92D759 スタック:
障害が発生しているアプリケーション名: SB.exe、バージョン: 1.3.0.0、タイム スタンプ: 0x5979095b 障害が発生しているモジュール名: KERNELBASE.dll、バージョン: 10.0.19041.662、タイム スタンプ: 0xec58f015 例外コード: 0xe0434352 障害オフセット: 0x000000000002d759 障害が発生しているプロセス ID: 0x245c 障害が発生しているアプリケーションの開始時刻: 0x01d6fed569ab3d56 障害が発生しているアプリケーション パス: C:\Program Files\WindowsApps\Microsoft.SmallBasic_1.3.0.0_x86__8wekyb3d8bbwe\Small Basic\SB.exe 障害が発生しているモジュール パス: C:\Windows\System32\KERNELBASE.dll レポート ID: 83a875a1-0379-447f-b9ff-20a0d8e17eee 障害が発生しているパッケージの完全な名前: Microsoft.SmallBasic_1.3.0.0_x86__8wekyb3d8bbwe 障害が発生しているパッケージに関連するアプリケーション ID: SmallBasic
ファイル名からして x86 版のように見えるのだけど、64bit版Windows の C:\Program Files\ にインストールされているように見える。そこは 64bit版のアプリをインストール場所ではないのだろうか。これっていいのだろうか…? *1
それとも、自分のメインPCの CPU は AMD Ryzen 7 1700 だから…? Intel製CPUじゃないと動かないアプリなのか…?
◎ .msi版をインストールしたら動いた。 :
Microsoftストア経由でインストールした版は起動すらしなかったけど、公式サイトから入手できる SmallBasic.msi を実行してインストールしてみたら、そちらの版なら起動してくれた。
_Small Basic
ただし、バージョンは 1.2 だった。Microsoftストア版は Version 1.3 らしいのだけど…。
_Small Basic
ただし、バージョンは 1.2 だった。Microsoftストア版は Version 1.3 らしいのだけど…。
◎ フォントサイズを変えたいのだけど。 :
自分は老眼なので、エディタ上のフォントサイズが小さ過ぎて困る。しかし、フォントサイズを変更するためのオプション設定等が何も無い。
ググったら、以下の情報に遭遇。
_Small Basic Tips - 開発環境の文字フォントの大きさを変えるには : @jsakamoto
Ctrl + マウスホイール回転で変更できるらしい。
しかし、あくまで一時的な変更のようで、ウインドウを閉じて、またファイルを開くと、小さい文字になった。
子供さんを対象にしたアプリだから、このあたりは仕方ないのかな。そりゃ子供さんなら豆粒みたいな文字すら読めるだろうし…。
あるいは、子供さんが何かの拍子に設定を変えてしまって、読めない文字サイズにしてしまわないようにとその手の設定機能を全部省いているのだろうか。だとしたら、.iniファイルや settings.json 等で、こっそり変更できるようにしておいてくれたらいいのになと…。
ググったら、以下の情報に遭遇。
_Small Basic Tips - 開発環境の文字フォントの大きさを変えるには : @jsakamoto
Ctrl + マウスホイール回転で変更できるらしい。
しかし、あくまで一時的な変更のようで、ウインドウを閉じて、またファイルを開くと、小さい文字になった。
子供さんを対象にしたアプリだから、このあたりは仕方ないのかな。そりゃ子供さんなら豆粒みたいな文字すら読めるだろうし…。
あるいは、子供さんが何かの拍子に設定を変えてしまって、読めない文字サイズにしてしまわないようにとその手の設定機能を全部省いているのだろうか。だとしたら、.iniファイルや settings.json 等で、こっそり変更できるようにしておいてくれたらいいのになと…。
*1: まあ、32bit/64bitアプリをインストールする時はそれぞれこの場所に、という取り決めにしているだけだったりして、問題は無いのかもしれないけれど、このあたりをそれらしくやれてないあたりで、このアプリは大丈夫かと不安になったりもして。
[ ツッコむ ]
以上、1 日分です。