;================================================================================ ;モジュール 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終わり>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>