〜 システム 〜
ウィンドウズのバージョンを取得 (要KERNEL32.DLL)

OS依存するような処理を行う場合、ウィンドウズのバージョンを取得してから処理しましょう。
特に9X系かNT系かによってできること、またはやり方が変わってしまうものが多々ありますので、
下記のサンプルを参考に組み込んでみてください。
サンプルでは、システム変数statに9X系かNT系かを示すプラットフォーム種別が、
システム変数refstrにバージョン文字列がそれぞれ入ります。
プラットフォーム種別は次の定数値のいずれかです。
VER_PLATFORM_WIN32s0x0000Windows3.1にWin32sを実装したもの
VER_PLATFORM_WIN32_WINDOWS0x0001Windows9xベース
VER_PLATFORM_WIN32_NT0x0002WindowsNTベース
尚、当Tipsでは、「Home」「Pro」「Ultimate」等のエディション取得は出来ません。

getosver タイプ
タイプ refstrに返すバージョン情報の取得タイプを指定する。
0「」(バージョン情報テキストは取得しない)
1「メジャーバージョン」
2「メジャーバージョン」.「マイナーバージョン」
3「メジャーバージョン」.「マイナーバージョン」.「ビルドナンバー」
4「メジャーバージョン」.「マイナーバージョン」.「ビルドナンバー」 「追加情報」
尚、statにはプラットフォーム種別コードが返る。

 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
32
33
34
	ll_libload kernel, "kernel32.dll"
	ll_getproc GetVersionEx, "GetVersionExA", kernel

#module
#deffunc getosver int
	mref type, 0
	mref stt, 64
	mref rstr, 65
	dim i, 37 // OSVERSIONINFO構造体
	i = 148
	ll_getptr i : ll_ret prm
	ll_callfunc prm, 1, GetVersionEx@
	stt = i.4
	if type = 0 : return
	if i.4 = 2 : rstr = "NT " : else : rstr = "" // VER_PLATFORM_WIN32_NT
	rstr += "" + i.1
	if type > 1 : rstr += "." + i.2
	if type > 2 : rstr += "." + i.3
	if type > 3 {
		rstr += " "
		repeat 32, 5
			strlen i.1, rstr
			wpoke rstr, i.1 + 0, i.cnt & 0xFFFF
			wpoke rstr, i.1 + 2, i.cnt >> 16
		loop
	}
	return
#global

	sdim pf, 8, 3
	pf = "−−", "9X", "NT"
	getosver 4
	mes "使用OSは" + pf.stat + "系の「" + refstr + "」です"
	stop

バージョン情報 = getosver(タイプ)
バージョン情報バージョン情報テキストの受取先を指定する。
タイプ バージョン情報の取得タイプを指定する。
0「」(バージョン情報テキストは取得しない)
1「メジャーバージョン」
2「メジャーバージョン」.「マイナーバージョン」
3「メジャーバージョン」.「マイナーバージョン」.「ビルドナンバー」
4「メジャーバージョン」.「マイナーバージョン」.「ビルドナンバー」 「追加情報」
尚、statにはプラットフォーム種別コードが返る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#uselib "kernel32.dll"
#func  global GetVersionEx "GetVersionExA" var

#module
#defcfunc getosver int type, local i, local s
	dim i, 37 // OSVERSIONINFO構造体
	i = 148
	GetVersionEx i
	if type = 0 : return i.4
	if i.4 = 2 : s = "NT " : else : s = "" // VER_PLATFORM_WIN32_NT
	s += str(i.1)
	if type > 1 : s += "." + i.2
	if type > 2 : s += "." + i.3
	if type > 3 {
		s += " "
		repeat 32 : lpoke s, strlen(s), i(5 + cnt) : loop
	}
	return s
#global

	pf = "−−", "9X", "NT"
	mes "使用OSは" + pf(getosver()) + "系の「" + getosver(4) + "」です"