;================================================================================ ;モジュール winver ;ver 2.2 ; バージョン関連 ; llmod3.hspが必要です ;================================================================================ ; 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 ; 2003 Windows Server 2003 ;2001 11 ; 2007 Windows Vista ;2007 1 ; 2007 Windows Server 2008 ;2008 4(2) ; 2009 Windows 7 ;2009 10 ; 2009 Windows Server 2008 R2 ;2009 10 ; -1 NT系の不明なプラットフォーム ;- - ; 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 ; #ifdef __hsp30__ ;module始め>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #module "_winver" ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;winver ;Windowsのバージョン取得 ;................................................................................ #deffunc winver array ver 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) dim lcl_ver,37 getptr a,lcl_ver lcl_ver(0) = 148 ;sizeof OSVERSIONINFO dllproc "GetVersionExA",a,1,D_KERNEL //rfstr = peek(lcl_ver(5),128) memcpy rfstr,lcl_ver,128,0,20 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 } else { 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 } else { if(ver(1) == 4) { ver = $101 ;win nt 4.0 } else { if(ver(1) == 5) { ver = 2000 ;win 2000 if(ver(2) == 1) { ver = 2001 ;win XP } else { if (ver(2) == 2) { ver = 2003 ;win Server 2003 family } } } else { ver = -1 ;unknown if(ver(1) == 6) { if(ver(2) == 0) { ver = 2007 ;win Vista / win Server 2008 family } else { if(ver(2) == 1) { ver = 2009 ;win 7 / win Server 2008 R2 family } } } } } } ver(3) = lcl_ver(3) : ver(4) = 0 } alloc lcl_ver,64 stt = 0 return ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;verinfo ;バージョン情報取得 ;(llmod3未対応) ;................................................................................ #deffunc verinfo str v1,int v2 /* if(verdll == 0) { s = "version.dll" ll_libload verdll,s if(verdll == 0) : dialog s + "が見つかりません" : return } mref stt,64 mref rfstr,65 rfstr = "" if(v2 > 7) : stt = 1 : return L = strlen(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 //dupptr clone,a,a(1),4 //ss = peek(clone,a.1) : str ss,16 + 8 //memcpy ss,clone,,,a(1) : str ss,16 + 8 str ss,16 + 8 sdim charset,8 //charset = peek(ss,4) : poke ss,4,0 : charset += ss memcpy 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 dupptr clone,a,a(1),4 //rfstr = peek(clone,a.1) memcpy restr,clone,a(1) */ return #global ;module終わり>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>