delphi.gif (306 バイト) OSとバージョンの判別


Windowsファミリー(Win32)には、Windows 3.1+Win32s, Windows 95, Windows NTなどがあります。これらのWin32 APIはまったく同じではなく、サポートされる範囲が違っていたり、動作に微妙な違いがあったりします。このため、OSの種別とバージョンの取得が必要になることがあります。

toach.gif (917 バイト) OS種別とバージョンを取得するAPI

OS種別とバージョンを取得するAPIはGetVersionExです。GetVersionというAPIもありますが、使用は推奨されていません。このAPIは、_OSVERSIONINFO型の引数を取ります。

type
_OSVERSIONINFO = record
   dwOSVersionInfoSize: LongWord;  // 呼び出し前に値を設定すること
   dwMajorVersion: LongWord;
   dwMinorVersion: LongWord;
   dwBuildNumber: LongWord;
   dwPlatformId: LongWord;
   szCSDVersion: array[0..127] of char;
end;

 

toach.gif (917 バイト) Windows95/98とWindows NTを判別するには

_OSVERSIONINFOのdwPlatformIdがVER_PLATFORM_WIN32_WINDOWSならWindows95/98です。VER_PLATFORM_WIN32_NTならWindows NTです。

 

toach.gif (917 バイト) バージョンを得るには

OSVERSIONINFOのdwMajorVersionがメジャーバージョンで、dwMinorVersionがマイナーバージョンです。例えば、Windows98ではメジャーバージョンが4、マイナーバージョンが1となります。

 

delphi1.gif (322 バイト)

procedure TForm1.FormCreate(Sender: TObject);
var
    info: OSVERSIONINFO;
begin
    info.dwOSVersionInfoSize := SizeOf(info);
    GetVersionEx(info);
    if info.dwPlatFormId = VER_PLATFORM_WIN32_NT then
    begin
      Label1.Caption := 'OS Type: Windows NT';
      Label2.Caption := 'Version ' + IntToStr(info.dwMajorVersion) + '.' +
        IntToStr(info.dwMinorVersion);
      Label3.Caption := 'Build ' + IntToStr(info.dwBuildNumber);
   end
   else if info.dwPlatFormId = VER_PLATFORM_WIN32_WINDOWS then
   begin
     Label1.Caption := 'OS Type: Windows (Win32)';
     Label2.Caption := 'Version ' + IntToStr(info.dwMajorVersion) + '.' +
        IntToStr(info.dwMinorVersion);
    Label3.Caption := 'Build ' + IntToStr($FFFF and info.dwBuildNumber);
  end
  else
    Label1.Caption := 'OS Type: Windowns3.1 + Win32s';
end;