ランチャー

今回はプログラムを簡単に登録できるランチャーを作ってみましょう。

最終的(初めからですが)には下記の形になります。

とりあえず一番簡単な形の物でよければ下記の方法でよいでしょう。

	screen 0,300,200
	title "ランチャー ver1.00"
	sdim touroku,32000
	sdim execution,128
	objsize 300,20
	listbox index,160,touroku
	pos 0,160 : button "登録",entry
	pos 0,180 : button "実行",running
	stop

*entry
	dialog "",16
	if stat==0 : stop
	if touroku!="" : touroku+="\n" ; 登録されているアイテムが1以上だと変数に改行を追加しておく
	touroku+=refstr
	objprm 0,touroku
	stop

*running
	if index==-1 : stop ; リストのアイテムがどれも選択されていない時は実行できなくしておく
	notesel touroku
	noteget execution,index
	exist execution
	if strsize==-1 : dialog ""+execution+"は存在しません" : stop
	exec execution,16 ; 関連付けられているプログラムで開く

当然改行2バイト含めて32000(厳密には31999)バイト超えてどうなってもしりません。

32000バイトを超えるようなら登録を拒否するかサイズを自動で変更するようにしましょう。

HSP2.6以上だとnoteselでメモリノートパッドに指定するとnoteadd機能が使用できますので

バッファサイズを自動で変更させる処理を書かなくてもいけます。

 

前回のプログラムを終了すると登録されているファイルインデックスは消滅してしまいました。

こういうソフトは一度登録したファイルは次の起動時にも情報が残っていますよね。

そういうことがしたいなら終了しても登録されているファイル名を保存しておく必要があります。

onexitを追加しておけば終了の際に指定したラベルにジャンプさせることができますので

ジャンプ先にbsaveで変数tourokuを保存してやればいいでしょう。

保存だけでなく、次回起動時にその作成したファイルをtourokuに読み込まなくてはなりません。

	onexit *exit
	screen 0,300,200
	title "ランチャー ver1.01"
	sdim touroku,32000
	sdim execution,128
	current=curdir ; exeファイルにしたらexedirでもよい
	exist "entryfiles.txt"
	if strsize!=-1 : bload "entryfiles.txt",touroku ; entryfiles.txtが存在すればロード

; 「objsize 300,20」から最後の行の「stop」までさっきと同じように書く

*exit
	strlen size,touroku
	bsave current+"\\entryfiles.txt",touroku,size ; 終了時に毎回作成(上書き保存)する

 

登録ファイルを毎回登録ボタンからするのは面倒、ドラッグアンドドロップ(以下D&D)で登録したい、

そういう時はD&Dを可能にするDLLを使いましょう。

HSP2.6以上だと2.55までDLLだったloadlib.dllが内蔵されましたので標準だけでもできるようになりました。

作成したEXEファイルのアイコンにD&Dする場合はHSP標準命令だけでできます。

EXEファイルアイコンにD&Dするとシステム変数cmdlineにD&Dされたファイル名が入ります。

通常のファイル1つだけをD&Dした場合、そのままcmdlineに入りますが、

フルパス内に半角スペースを含む場合、OSによって入る形が変わるようです(全OS未確認)。

大体はダブルクォートでフルパス名が囲まれる形になります。

2つ以上のファイルをD&Dするとフルパス名とフルパス名の間に自動で半角スペースが入ります。

(例)「D:\aaa\bbb.txt "C:\program files\xxx\yyy.exe" C:\abc\xyz.as」

例を示すよりもご自分の目で確かめる方が早いですね。

下記のスクリプトをEXE化してみてください。

	dialog ""+cmdline
	end

この方法を使用してランチャーにD&D機能を追加してみましょう。

ここでは複数ファイルがD&Dされたら全ファイル登録するようにしてみましょう。

	screen 0,300,200
	title "ランチャー ver2.00"
	onexit *exit
	sdim touroku,32000
	exist "launcher.ini"
	if strsize!=-1 : bload "launcher.ini",touroku
	if cmdline!="" : gosub *dd ; 何かのファイルがD&Dされたとき
	objsize 300,20
	listbox index,180,touroku
	pos 0,180 : button "実行",running
	stop

*dd
	sdim tmp,1600
	sdim buf,128
	tmp=cmdline
	char=""
	strlen allfilesize,tmp
	repeat allfilesize+1 ; cmdlineの長さ分(+1)繰り返す
		peek chk,tmp,cnt
			if chk==34 : continue ; 現在調べている文字がダブルクォートなら飛ばす
			if chk==32|(chk==0) { ; スペースか終端文字ならチェック
			exist buf
			if strsize!=-1 { ; cmdline内のスペースまでの文字列が存在する場合
				if touroku!="" : touroku+="\n"
				touroku+=buf ; 変数touroku(リスト)に追加する
				memset buf,0,128 ; 一時変数を初期化しておく
				continue cnt+1
			}
		}
		poke char,0,chk
		buf+=char
	loop
	objprm 0,touroku
	return

*running
	notesel touroku
	noteget execution,index
	exec execution,16

*exit
	strlen len,touroku
	bsave exedir+"\\launcher.ini",touroku,len
	end

D&Dされたファイルを登録するときにダブルクォートを取り除いていますが、

調べていないのでわかりませんが全角文字の下位バイトが32や34になることがあるかもしれません。

TIPSの文字列編に登録してある、全角文字かどうかを調べる方法で回避しましょう。

 

今回作成したランチャーに登録削除を追加したり、複数同時起動機能をつけたり、

listboxでなくページ切り替え式の登録アイコンを押して起動できる物にしてみましょう。

ページをタブで管理してみたり実行履歴を付けてみるのも面白いかもしれません。

最後のスクリプトではD&Dに対応したけどボタンでの登録が出来なくなってしまいました。

この章のまとめスクリプトでは両方入ってますのでご安心を(?)。コチラからどうぞ。