OSとバージョンの判別
Windowsファミリー(Win32)には、Windows 3.1+Win32s, Windows 95, Windows NTなどがあります。これらのWin32 APIはまったく同じではなく、サポートされる範囲が違っていたり、動作に微妙な違いがあったりします。このため、OSの種別とバージョンの取得が必要になることがあります。
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;
Windows95/98とWindows NTを判別するには
_OSVERSIONINFOのdwPlatformIdがVER_PLATFORM_WIN32_WINDOWSならWindows95/98です。VER_PLATFORM_WIN32_NTならWindows NTです。
バージョンを得るには
OSVERSIONINFOのdwMajorVersionがメジャーバージョンで、dwMinorVersionがマイナーバージョンです。例えば、Windows98ではメジャーバージョンが4、マイナーバージョンが1となります。
例
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;