〜 ファイル 〜
実行している自身のファイル名を取得 (要KERNEL32.DLL)

EXE(自分自身)の名前は通常、コンパイル時または作成後にエクスプローラから
プログラマであるアナタの手によって名付けられた名称である場合が多いと思いますが、
利用者が自由に変更することができますので、配布時の名前が絶対に付いているとは限りません。
EXEのあるフォルダパスは、HSP2はexedir、HSP3はdir_exeまたはdirinfo(1)で確認できますが、
実行されているEXE自身のファイル名を取得する命令は用意されていません。
ファイル名はAPI関数のGetModuleFileNameで取得することができますので、
下記にその使い方をサンプルとして載せておきます。
	

exename 除去フラグ
除去フラグ自分自身のフルパス(=0)を取得するかファイル名のみ(=1)を取得するかを指定する。
尚、取得したパスはrefstrに返る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
	ll_libload kernel, "kernel32.dll"
	ll_getproc GetModuleFileName, "GetModuleFileNameA", kernel

#module
#deffunc exename int
	mref fileonly, 0
	mref rstr, 65
	ll_getptr rstr : ll_ret i
	prm = 0, i, 512
	ll_callfunc prm, 3, GetModuleFileName@
	if fileonly : getpath rstr, rstr, 8
	return
#global

	exename
	mes refstr // フルパスを取得
	exename 1
	mes refstr // ファイル名のみ取得
	stop

パス = exename(除去フラグ)
パス取得したファイル名の受取先を指定する。
除去フラグ自分自身のフルパス(=0)を取得するかファイル名のみ(=1)を取得するかを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#uselib "Kernel32.dll"
#func  global GetModuleFileName "GetModuleFileNameA" int, var, int

#module
#defcfunc exename int fileonly, local rstr
	sdim rstr, 512
	GetModuleFileName 0, rstr, 512
	if fileonly : rstr = getpath(rstr, 8)
	return rstr
#global

	mes exename()	// フルパスを取得
	mes exename(1)	// ファイル名のみ取得