	;================================================================================
	;モジュール winver
	;ver 1.2
	;	バージョン関連
	;	llmod.asが必要です
	;================================================================================

	; winverモジュールの命令一覧
	;
	; winver			Windowsのバージョン取得
	; verinfo			バージョン情報取得
	;
	; 計	2個


	;使い方
	;================================================================================
	; winver v1			Windowsのバージョン取得
	;
	;  v1 : バージョンを受け取るための数値変数
	;================================================================================
	;
	;<>説明
	; ウィンドウズのバージョンを取得します。
	; 変数には以下の値が入ります。
	; v.0           プラットフォーム	;発売日
	;	0	Windows 3.1		;1994  2
	;	95	Windows 95		;1995 11(7) 
	;	98	Windows 98		;1998  7(6)
	;	100	Windows Me		;2000  9
	;	$100	Windows NT 3.x		;1993  7
	;	$101	Windows NT 4.x		;1996 12(6)
	;	2000	Windows 2000		;2000  2
	;	2001	Windows XP		;2001 11
	; v.1    メジャーバージョン
	; v.2    マイナーバージョン
	; v.3    ビルドナンバー
	; v.4    メジャー&マイナーバージョン(プラットフォームが Windows 95,98,Meの時のみ)
	;
	;<>例
	;	winver ver : s = refstr
	;	if ver<100  : v = ""+ver
	;	if ver=100  : v = "Me"
	;	if ver=$100 : v = "NT 3.5"
	;	if ver=$101 : v = "NT 4.0"
	;	if ver=2000 : v = "2000"
	;	if ver=2001 : v = "XP"
	;	mes "platform = Windows "+v
	;	mes "メジャーバージョン = "+ver.1
	;	mes "マイナーバージョン = "+ver.2
	;	mes "ビルドナンバー = "+ver.3
	;	if ver<=100 : mes "メジャー&マイナーバージョン"+ver.4
	;	mes "szCSDVersion:"+s
	;

	;================================================================================
	; verinfo "s1",n2		バージョン情報取得
	;
	;  s1 : ファイル名
	;  n2 : 取得するタイプ
	;================================================================================
	;
	;<>説明
	; s1で指定したファイルから、バージョン情報を取得します。
	; s1にはdllやexeなどのバイナリファイルを指定します。
	; refstrにバージョン情報が代入されます。
	;
	; 16bitファイルからはバージョンを取得できません。
	; エラーが起きた場合はstatに1が代入されます。
	;
	;<>取得するタイプ
	; n2の値	取得するもの
	; 0		会社名
	; 1		ファイルの説明
	; 2		ファイルバージョン
	; 3		内部ファイル名
	; 4		著作権
	; 5		もとのファイル名
	; 6		製品名
	; 7		製品バージョン
	;
	;<>例
	;	#include "llmod.as"
	;	#include "winver.as"
	;
	;	file="user32.dll"   : gosub get_verinfo
	;	file="comctl32.dll" : gosub get_verinfo
	;	stop
	;
	;*get_verinfo
	;	s=windir+"\\system\\"+file
	;	mes "●ファイル"+s+"のバージョン情報"
	;	repeat 8
	;		verinfo s,cnt
	;		mes refstr
	;	loop
	;	return
	;

	;module始め>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	#module "winver"


	;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	;winver
	;Windowsのバージョン取得
	;................................................................................
	#deffunc winver val
	mref ver,16
	mref stt,64
	mref rfstr,65

	;document PlatformSDK Feb 2003
	;Development Guid
	; Windows 95/98/Me Programming
	;  Release Notes
	;  (Detecting Releases of Windows 95/98/Me, GetVersionEx, OSVERSIONINFO)

	alloc lcl_ver,148
	getptr a,lcl_ver
	lcl_ver.0=148		;sizeof OSVERSIONINFO
	dllproc "GetVersionExA",a,1,D_KERNEL

	ll_peek rfstr,a+20,128

	ver.1=lcl_ver.1		;MajorVersion
	ver.2=lcl_ver.2		;MinorVersion

	;typedef struct _OSVERSIONINFO {  
	;	DWORD dwOSVersionInfoSize;	0
	;	DWORD dwMajorVersion;		1
	;	DWORD dwMinorVersion;		2
	;	DWORD dwBuildNumber;		3
	;	DWORD dwPlatformId;		4
	;	TCHAR szCSDVersion[128];
	;} OSVERSIONINFO;

	;#define VER_PLATFORM_WIN32s		0
	;#define VER_PLATFORM_WIN32_WINDOWS	1
	;#define VER_PLATFORM_WIN32_NT		2

	if lcl_ver.4=0 {	;VER_PLATFORM_WIN32s
		ver=0				;win3.1
		ver.3=0 : ver.4=0
	}
	if lcl_ver.4=1 {	;VER_PLATFORM_WIN32_WINDOWS
		ver=95
		if ver.2 == 10 : ver=98		;win 98
		if ver.2 == 90 : ver=100	;win Me

		ver.3=lcl_ver.3 >> 16 & $ffff : ver.4=lcl_ver.3 & $ffff

		;s=refstr : peek c,s,1
		;Windows 95
		;  c = 'A' : OEM Service Release 1
		;  c = 'B' : OEM Service Release 2
		;  c = 'C' : OEM Service Release 2.5
		;Windows 98
		;  c = 'A'      : Second Edition
		;  ver.4 = 2000 : Service Pack 1
	}
	if lcl_ver.4=2 {	;VER_PLATFORM_WIN32_NT
		if ver.1 == 3 : ver=$100	;win nt 3.5
		if ver.1 == 4 : ver=$101	;win nt 4.0
		if ver.1 == 5 {
			if ver.2 == 0 : ver=2000	;win 2000
			if ver.2 == 1 : ver=2001	;win XP
			;if ver.2 == 2 : ver=2003	;win Server 2003 family
		}
		ver.3=lcl_ver.3 : ver.4=0
	}

	alloc lcl_ver,64
	stt=0
	return


	;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	;verinfo
	;バージョン情報取得
	;................................................................................
	#deffunc verinfo str,int
	if verdll=0 {
		s="version.dll"
		ll_libload@ verdll,s
		if verdll=0 : dialog s+"が見つかりません" : return
	}
	mref v1,32		;file name
	mref v2,1		;index
	mref stt,64
	mref rfstr,65

	rfstr=""
	if v2>7 : stt=1 : return

	strlen L,v1 : if L>=64 : sdim s,L+1
	getptr p,s
	getptr p.1,a
	s=v1
	a=1
	dllproc "GetFileVersionInfoSizeA",p,2,verdll
	L=stat
	if L=0 : stt=1 : return		;no version information exist
	if L>=64 : alloc buf,L+1
	getptr pbuf,buf
	getptr p.2,a.1

	prm=p,0,L,pbuf
	dllproc "GetFileVersionInfoA",prm,4,verdll
	if stat=0 : stt=1 : return

	s="\\VarFileInfo\\Translation"
	prm=pbuf,p,p.1,p.2
	dllproc "VerQueryValueA",prm,4,verdll

	ll_peek@ ss,a,a.1 : str ss,16+8
	charset=""
	peek charset,ss,4 : poke ss,4,0 : charset+=ss
	charupper charset

	sdim ss,64,8
	ss="CompanyName","FileDescription","FileVersion","InternalName"
	ss.4="LegalCopyright","OriginalFilename","ProductName","ProductVersion"

	s="\\StringFileInfo\\"+charset+"\\"
	s+=ss.v2

	prm=pbuf,p,p.1,p.2
	dllproc "VerQueryValueA",prm,4,verdll
	if a.1=0 : stt=1 : return
	alloc ss,64

	ll_peek@ rfstr,a,a.1

	return


	#global
	;module終わり>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
