2023/10/25(水) [n年前の日記]
#3 [hsp] HSPで生成したプログラムのアイコンを変えてみたかった
せっかくだから、HSPで生成した .exe や .scr のアイコンを変更してみたいと思い立った。環境は Windows10 x64 22H2。
HSP 3.6 や HSP 3.7beta では、ソース内で以下の記述をしておくことでアイコンを変更できるらしい。
しかし、上手く行かない…。
HSP 3.6 や HSP 3.7beta では、ソース内で以下の記述をしておくことでアイコンを変更できるらしい。
#packopt icon "icon.ico"
しかし、上手く行かない…。
◎ アイコンファイル作成 :
とりあえず、アイコンファイル(.ico)を作成。今回は、ToYcon 0.9 を使って、256x256、32bitカラーの1枚の画像からアイコンを作ってみた。
_ToYcon のダウンロードと使い方 - k本的に無料ソフト・フリーソフト
アイコンの種類は WindowsXPタイプにしてみた。32bit, 8bit, 4bitカラー で、48x48, 32x32, 16x16 のサイズを内包。全部で9個のアイコン画像が入ってるマルチアイコンファイル。
生成された .ico を、IcoFX Portable 1.6.4 Rev 3 で開いて確認してみたけれど、それらしいファイルになっているように見えた。
_IcoFX Portable (icon editor) | PortableApps.com
_ToYcon のダウンロードと使い方 - k本的に無料ソフト・フリーソフト
アイコンの種類は WindowsXPタイプにしてみた。32bit, 8bit, 4bitカラー で、48x48, 32x32, 16x16 のサイズを内包。全部で9個のアイコン画像が入ってるマルチアイコンファイル。
生成された .ico を、IcoFX Portable 1.6.4 Rev 3 で開いて確認してみたけれど、それらしいファイルになっているように見えた。
_IcoFX Portable (icon editor) | PortableApps.com
◎ アイコンの変更ができない :
HSP 3.7beta、及び、HSP 3.6 のHSPエディタで目的のファイルを開いて、以下を記述してから Ctrl + F9 で実行ファイルを生成してみたのだけど、ダメだった…。
アイコンが変更できた場合も、エクスプローラ上で見るとアイコンが変わってるようには見えない。ただ、Resource Hacker 5.1.8 を使って .exe の状態を確認すると、たしかに Icon Group が変わっていることが確認できた。
エラーが出る時は、DOS窓が開いて以下が表示された。
#packopt icon "icon.ico"
HSPバージョン | 生成ファイル | 結果 |
---|---|---|
HSP 3.7beta7 | .exe生成 | Failure. ファイルは生成されるがアイコンは変わってない |
HSP 3.7beta7 | .scr生成 | Failure. ファイルは生成されるがアイコンは変わってない |
HSP 3.6 | .exe生成 | Success. ファイルも生成できて、アイコンも変わった |
HSP 3.6 | .scr生成 | Failure. 途中でエラーが出る |
アイコンが変更できた場合も、エクスプローラ上で見るとアイコンが変わってるようには見えない。ただ、Resource Hacker 5.1.8 を使って .exe の状態を確認すると、たしかに Icon Group が変わっていることが確認できた。
エラーが出る時は、DOS窓が開いて以下が表示された。
iconins.exe v1.00 Basic program has been created by Kpan. Modified by inovia. [ERROR] No.10 実行ファイルが見つかりません Enterキーを押してください
◎ iconinsについて :
HSP が #packopt の指定でアイコンを変更する場合、HSP に同梱されている iconins.exe というツールを使ってアイコンを変更しているらしい。
ただ、この iconins.exe を呼び出す別のプログラムが、実行ファイル名を "〜.exe" に決め打ちして iconins.exe を呼んでいるそうで…。故に、.exe を生成した場合はアイコン変更ができるけど、.scr を生成した場合はアイコン変更できない、という話を見かけた。
_HSP3.7bata でスクリーンセーバー作成 - HSPTV!掲示板
別途 iconins.exe を呼び出すことでアイコン変更できる時もあるらしい。何のオプションもつけずに iconins を実行すると以下のヘルプが表示される。
実行ファイルのパスや、アイコンファイルのパスは、絶対パス(C:\hoge\fuga\piyo.exe)じゃないとダメらしい。ファイル名のみ(piyo.exe)だけを指定してもエラーが出て動かなかった。
HSP 3.6 で生成した .exe や .scr は、後から別途 iconins.exe を呼び出すことでアイコン変更ができたけど。HSP 3.7beta で生成した .exe, .scr には反映されなかった。何故。
ただ、この iconins.exe を呼び出す別のプログラムが、実行ファイル名を "〜.exe" に決め打ちして iconins.exe を呼んでいるそうで…。故に、.exe を生成した場合はアイコン変更ができるけど、.scr を生成した場合はアイコン変更できない、という話を見かけた。
_HSP3.7bata でスクリーンセーバー作成 - HSPTV!掲示板
別途 iconins.exe を呼び出すことでアイコン変更できる時もあるらしい。何のオプションもつけずに iconins を実行すると以下のヘルプが表示される。
> iconins iconins.exe v1.00 Basic program has been created by Kpan. Modified by inovia. 使用法: iconins -e"実行ファイルパス" -i"アイコンファイルパス" -v"バージョンファイルパス" -l"言語ID(オプション)" -u"UPX(オプション)" -m "manifest(オプション)"
実行ファイルのパスや、アイコンファイルのパスは、絶対パス(C:\hoge\fuga\piyo.exe)じゃないとダメらしい。ファイル名のみ(piyo.exe)だけを指定してもエラーが出て動かなかった。
HSP 3.6 で生成した .exe や .scr は、後から別途 iconins.exe を呼び出すことでアイコン変更ができたけど。HSP 3.7beta で生成した .exe, .scr には反映されなかった。何故。
◎ Let's HSPIC! を試してみた :
iconins.exe を使うことで上手く行かないなら、別のツールを使ったら上手くいくのだろうか? ググったところ、Let's HSPIC! なるツールがあるらしい。試用してみた。
_HSP補助ツール - Let's HSP!
lhspic10.zip を入手。バージョンは 1.0。解凍して任意のフォルダに置いた。
動作には Resource Hacker 3.4.0 日本語版 (rh_japanese.zip) が必要らしい。Internet Archive を探して入手。
_Resource Hacker (WebArchive)
zip を解凍して、これも任意の場所に置いた。
Let's HSPIC! (lhspic.exe) を起動して、ウインドウを右クリック。リソースエディタのパス、を選んで、ResHacker.exe を指定。
.exe と .ico をそれぞれウインドウの入力欄にドラッグアンドドロップすれば、入力ファイルとして指定できる。その状態で「Change!」ボタンをクリックすれば反映されるはず。
だったのだけど。「無効なファイルです。(1)」とエラーダイアログが表示されて、処理されなかった。
更に、Let's HSPIC! を閉じようとすると、Microsoft Visual C++ Runtime Library がエラーを出す。2009年頃のソフトのせいか、現状では動作に問題があるということだろうか…。
_Let's HSPIC! 追加インフォメーション
上記ページによると、hsp3mt.hrt を使用しているファイルに対してはエラーが出るそうで。hsp3mt.hrt はHSPをマルチスレッド対応にするためのファイルらしいけど、たしか HSP 3.6 や HSP 3.7beta では標準でマルチスレッドが有効になっている、という話を見かけた気がする…。
_HSP3.6 新機能ハイライト
HSPの現行バージョンはランタイムが以前と変わってしまったので、Let's HSPIC! は使えない、ということかもしれないなと…。
_HSP補助ツール - Let's HSP!
lhspic10.zip を入手。バージョンは 1.0。解凍して任意のフォルダに置いた。
動作には Resource Hacker 3.4.0 日本語版 (rh_japanese.zip) が必要らしい。Internet Archive を探して入手。
_Resource Hacker (WebArchive)
zip を解凍して、これも任意の場所に置いた。
Let's HSPIC! (lhspic.exe) を起動して、ウインドウを右クリック。リソースエディタのパス、を選んで、ResHacker.exe を指定。
.exe と .ico をそれぞれウインドウの入力欄にドラッグアンドドロップすれば、入力ファイルとして指定できる。その状態で「Change!」ボタンをクリックすれば反映されるはず。
だったのだけど。「無効なファイルです。(1)」とエラーダイアログが表示されて、処理されなかった。
更に、Let's HSPIC! を閉じようとすると、Microsoft Visual C++ Runtime Library がエラーを出す。2009年頃のソフトのせいか、現状では動作に問題があるということだろうか…。
_Let's HSPIC! 追加インフォメーション
上記ページによると、hsp3mt.hrt を使用しているファイルに対してはエラーが出るそうで。hsp3mt.hrt はHSPをマルチスレッド対応にするためのファイルらしいけど、たしか HSP 3.6 や HSP 3.7beta では標準でマルチスレッドが有効になっている、という話を見かけた気がする…。
_HSP3.6 新機能ハイライト
また、これに伴って、HSP3.51まで用意されていたマルチスレッド版ランタイム(hsp3mt)の同梱を終了しました。 hsp3mtを使用していたユーザーは、引き続き標準のHSP3ランタイムをご使用ください。
HSPの現行バージョンはランタイムが以前と変わってしまったので、Let's HSPIC! は使えない、ということかもしれないなと…。
◎ 2023/10/26追記 :
その後も実験していたら、HDP 3.7beta7 の場合も、後から iconins.exe を呼ぶことでアイコン変更できていることが分かった。
エクスプローラ上で見るとアイコンが変わってないので反映されていないものと思い込んでしまったけれど、Resource Hacker で exe や scr を開いてみると、Icon Group の項目内で、ちゃんとマルチアイコンが登録されていた。
また、作業ディレクトリ内の exe や scr をデスクトップにコピーしてみたところ、デスクトップ上ではちゃんとアイコンが変わった状態で表示された。
しかし、ソース内に #packopt icon "icon.ico" と書いてしまうと、HSP 3.6利用時に、スクリーンセーバとして scr を生成した際にエラーが出てしまう。そこで、iconin.exe を呼び出すbatファイルを書いて、exe や scr ができた後、手動でbatファイルを実行してアイコン変更するようにしてみた。
changeicon.bat
現状では、このやり方が一番問題が少なそうな気もする。いやまあ、batファイル内の iconins.exe のパスを環境毎に変更しないといけない面倒臭さはあるのだけど…。
エクスプローラ上で見るとアイコンが変わってないので反映されていないものと思い込んでしまったけれど、Resource Hacker で exe や scr を開いてみると、Icon Group の項目内で、ちゃんとマルチアイコンが登録されていた。
また、作業ディレクトリ内の exe や scr をデスクトップにコピーしてみたところ、デスクトップ上ではちゃんとアイコンが変わった状態で表示された。
しかし、ソース内に #packopt icon "icon.ico" と書いてしまうと、HSP 3.6利用時に、スクリーンセーバとして scr を生成した際にエラーが出てしまう。そこで、iconin.exe を呼び出すbatファイルを書いて、exe や scr ができた後、手動でbatファイルを実行してアイコン変更するようにしてみた。
changeicon.bat
@rem @set ICONINSPATH=C:\Prog\hsp36\iconins.exe @set ICONINSPATH=C:\Prog\hsp37beta\iconins.exe @set CURDIR=%~dp0 %ICONINSPATH% -e"%CURDIR%p3drdscr.exe" -i"%CURDIR%icon.ico" %ICONINSPATH% -e"%CURDIR%p3drdscr.scr" -i"%CURDIR%icon.ico"
現状では、このやり方が一番問題が少なそうな気もする。いやまあ、batファイル内の iconins.exe のパスを環境毎に変更しないといけない面倒臭さはあるのだけど…。
[ ツッコむ ]
以上です。