〜 システム 〜
環境文字列を展開 (要KERNEL32.DLL)

環境変数やコマンドプロンプトでは「%varable%形式」の環境文字列が使用できます。
環境文字列とは別の長い文字列等に付けられたエイリアスであり、
API関数ExpandEnvironmentStringsを使うことで、
例えば環境文字列%TEMP%はテンポラリフォルダのパスに展開してくれます。

API関数ExpandEnvironmentStringsは第1引数から順に「環境文字列名」「受取先変数」「サイズ」です。
環境文字列名に対象の環境文字列を指定し、取得した環境文字列の格納先として受取先変数を指定、
その受取先の変数サイズをサイズパラメータに指定してください。
もし、取得する環境文字列サイズよりも受取先変数サイズが小さい場合は正常に取得できないようです。
	

expandev 環境文字列名, 取得サイズ
環境文字列名取得する環境文字列名を指定する。尚、設定に成功すればrefstrに取得文字列がセットされる。
取得サイズ取得サイズを指定する。省略すればファイルパス最大サイズ同様の260バイトとなる。

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

#module
#deffunc expandev str, int
	mref name, 32 : mref size, 1
	mref rstr, 65
	size = (size = 0) * 260 + size
	sdim s, size
	ll_getptr name : ll_ret prm.0
	ll_getptr s : ll_ret prm.1
	prm.2 = size
	ll_callfunc prm, 3, ExpandEnvironmentStrings@
	rstr = s
	return
#global

	es = "%windir%"
	expandev es
	mes es + " = \"" + refstr + "\""
	stop

取得文字列 = expandev(環境文字列名, 設定テキスト)
取得文字列取得した環境文字列の受取先を指定する。
環境文字列名取得する環境文字列名を指定する。
取得サイズ取得サイズを指定する。省略すればファイルパス最大サイズ同様の260バイトとなる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#uselib "kernel32.dll"
#func	global ExpandEnvironmentStrings "ExpandEnvironmentStringsA" str, var, int

#module
#defcfunc expandev str name, int size, local i, local rstr
	i = (size = 0) * 260 + size
	sdim rstr, i
	ExpandEnvironmentStrings name, rstr, i
	return rstr
#global

	es = "%windir%"
	mes strf("%s = \"%s\"", es, expandev(es))