2026/02/27(金) [n年前の日記]
#1 [golang] Go言語でスクリーンセーバを作れないか実験中。その2
Go言語(golang)でWindows用のスクリーンセーバを作れそうかどうか実験しているところ。環境は Windows11 x64 25H2 + Go 1.25.7 64bit。
◎ フルスクリーン表示時の不具合について :
昨日の時点ではフルスクリーン表示になった時に表示が固まったり暗い画面しか出てこなかったりしたけれど、Ebitengine利用時に以下の対策を入れてみたら改善した…。ような気がする。
この修正をしたら、10回ぐらいスクリーンセーバを起動させてもおかしな状態にはならなかった。どの修正が効いてくれたのか分からないけれど、それっぽく動いてるから、まあええやろ…。
- ebiten.SetFullscreen(true) を呼ばずにフルスクリーン表示するようにした。
- OpenGLを利用するように強制した。os.Setenv("EBITENGINE_GRAPHICS_LIBRARY", "opengl") を追加。
- テクスチャの解放をするようにした。
- ebiten.SetWindowFloating(true) を呼ばないようにした。最前面表示を指定するAPIらしい。
この修正をしたら、10回ぐらいスクリーンセーバを起動させてもおかしな状態にはならなかった。どの修正が効いてくれたのか分からないけれど、それっぽく動いてるから、まあええやろ…。
◎ Windows APIの操作 :
昨日の段階では golang.org/x/sys/windows だけを使って Windows API を操作していたのだけど。
_windows package - golang.org/x/sys/windows - Go Packages
ウインドウ生成その他をするために API の定義をしないといけなくて、このあたり何かしらのライブラリでまとめてあったりしないのかなと思えてきた。
AI(Google Gemini)に尋ねてみたらいくつかライブラリを提案されたけれど、github.com/lxn/win が良さそうだなと…。
_win package - github.com/lxn/win - Go Packages
_lxn/win: A Windows API wrapper package for the Go Programming Language
"github.com/lxn/win" を import したら、win.* という記述でAPIや定数が利用できるようになった。大量に並んでいた独自定義部分をごっそり削除することができた。
_windows package - golang.org/x/sys/windows - Go Packages
ウインドウ生成その他をするために API の定義をしないといけなくて、このあたり何かしらのライブラリでまとめてあったりしないのかなと思えてきた。
AI(Google Gemini)に尋ねてみたらいくつかライブラリを提案されたけれど、github.com/lxn/win が良さそうだなと…。
_win package - github.com/lxn/win - Go Packages
_lxn/win: A Windows API wrapper package for the Go Programming Language
"github.com/lxn/win" を import したら、win.* という記述でAPIや定数が利用できるようになった。大量に並んでいた独自定義部分をごっそり削除することができた。
[ ツッコむ ]
以上です。