mieki256's diary



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.

スクリーンショット。 :

インストールの流れや動作画面は、以下のような感じ。

インストール手順。 :

  1. driveqp_scrsaver_*.zip をダウンロードして、任意の場所に解凍(展開)。
  2. replace_ini.vbs を実行。driveqp.ini 内のパス指定が、現在フォルダの場所で書き換えられる。
  3. driveqp.scr と driveqp.ini を、C:\Windows\SysWOW64\ にコピー。(管理者権限が必要)
  4. Windowsの「スクリーンセーバーの変更」ダイアログを表示して、driveqp を選択。

ちなみに、driveqp_scrsaver.exe を実行すれば、スクリーンセーバとして利用しなくても、デモ(?)がフルスクリーンで表示されます。

終了方法。 :

以下のいずれかの操作をすれば、スクリーンセーバが終了します。
  • ESCキーを叩く。
  • マウスクリックする。
  • マウスを大きく動かす。

使用モデルデータについて。 :

モデルデータは、OpenGameArt で公開されている CC0ライセンスのモデルデータを利用させてもらいました。作者様方には感謝です。助かりました。

_Landscape Asset v2 | OpenGameArt.org
_Vehicles Assets pt1 | OpenGameArt.org
_OpenGameArt.org

余談。 :

先日作成したスクリーンセーバのラッパー、scrsavwr のおかげで、フルスクリーン表示をするプログラムさえ作成してしまえばWindows用のスクリーンセーバとして利用できますよ、という例は一応示せたかなあ、と…。

_mieki256/scrsavwr: Screensaver wrapper on Windows

まあ、フルスクリーン表示をするプログラム側で、キー入力やマウス移動を検出して、自分自身を終了させる処理が必要になりますけど…。

#2 [prog] VBScriptでiniファイルを書き換える処理を書いてみた

.iniファイル内に書かれたフォルダパス(ディレクトリパス)を、現在フォルダで書き換えたいなと。

エディタで iniファイルを開いて、手作業で書き換えても目的は果たせるけれど、何度も試していると面倒臭い。ここは少しでも自動化したい。

ということで、WSH(VBScript)を使って、.ini ファイルを書き換えられないか試してみたり。環境は、Windows10 x64 20H2。

処理としては、以下のような感じ。
  1. スクリプトの置いてあるフォルダパス(カレントフォルダ)を取得。
  2. iniファイルの元になるテンプレートファイルが存在するか調べる。
  3. iniファイルがカレントフォルダ内に存在するか探す。
  4. テンプレートファイルを読み込んで、特定文字列(今回は "[INSTALL_DIR]") をフォルダパスで置換。
  5. 置換後の内容で、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 を実行すれば、iniファイルの内容を書き換えることができるようになった。とメモ。

#3 [prog] VBScriptを編集できるヨサゲなエディタは無いものか

VBScriptを編集できるヨサゲなエディタは無いものか…。補完を使いたい…。

一応、今回は、xyzzy (+ basic-mode) で作業してしまったけれど。vbs特有のキーワードに対する補完が使えなくて、不便だなと…。

Visual Studio Code も試してみるか…。

_VBS - Visual Studio Marketplace

なんだかいくつか拡張があるっぽいけど…。どれがいいのやら…。

#4 [smallbasic] Microsoft Small Basic が起動しない

Windows10 x64 20H2 + Microsoft ストア経由で Small Basic 1.3 をインストールしてみた。

しかし、起動してくれない。

イベントビューアで見たらエラーが出ていた。
アプリケーション: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 Tips - 開発環境の文字フォントの大きさを変えるには : @jsakamoto

Ctrl + マウスホイール回転で変更できるらしい。

しかし、あくまで一時的な変更のようで、ウインドウを閉じて、またファイルを開くと、小さい文字になった。

子供さんを対象にしたアプリだから、このあたりは仕方ないのかな。そりゃ子供さんなら豆粒みたいな文字すら読めるだろうし…。

あるいは、子供さんが何かの拍子に設定を変えてしまって、読めない文字サイズにしてしまわないようにとその手の設定機能を全部省いているのだろうか。だとしたら、.iniファイルや settings.json 等で、こっそり変更できるようにしておいてくれたらいいのになと…。

*1: まあ、32bit/64bitアプリをインストールする時はそれぞれこの場所に、という取り決めにしているだけだったりして、問題は無いのかもしれないけれど、このあたりをそれらしくやれてないあたりで、このアプリは大丈夫かと不安になったりもして。

以上、1 日分です。

過去ログ表示

Prev - 2021/02 - 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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project