mieki256's diary



2023/10/25(水) [n年前の日記]

#3 [hsp] HSPで生成したプログラムのアイコンを変えてみたかった

せっかくだから、HSPで生成した .exe や .scr のアイコンを変更してみたいと思い立った。環境は Windows10 x64 22H2。

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

アイコンの変更ができない :

HSP 3.7beta、及び、HSP 3.6 のHSPエディタで目的のファイルを開いて、以下を記述してから Ctrl + F9 で実行ファイルを生成してみたのだけど、ダメだった…。

#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 を実行すると以下のヘルプが表示される。
> 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 新機能ハイライト
また、これに伴って、HSP3.51まで用意されていたマルチスレッド版ランタイム(hsp3mt)の同梱を終了しました。 hsp3mtを使用していたユーザーは、引き続き標準のHSP3ランタイムをご使用ください。

HSP3.6 新機能ハイライト より


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
@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 のパスを環境毎に変更しないといけない面倒臭さはあるのだけど…。

以上です。

過去ログ表示

Prev - 2023/10 - 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