GetVersionEx 填充 TOSVersionInfo (對應 _OSVERSIONINFOA) 結構,提供主版本號、次版本號、建置編號、平台 ID 及服務包字串。雖然 Windows 8.1 起行為有變 (需 Manifest),但在舊版相容模式下仍可正常運作。
_OSVERSIONINFOA = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformId: DWORD;
szCSDVersion: array[0..127] of AnsiChar;
end;
| 常數 | 值 | 平台 |
|---|---|---|
| VER_PLATFORM_WIN32s | 0 | Win32s on Windows 3.1 |
| VER_PLATFORM_WIN32_WINDOWS | 1 | Windows 95/98/Me |
| VER_PLATFORM_WIN32_NT | 2 | Windows NT/2000/XP/Vista/7/8/10/11 |
| VER_PLATFORM_WIN32_CE | 3 | Windows CE |
var
OsInfo: TOSVersionInfo;
const
s = '主版本: %d' + sLineBreak +
'次版本: %d' + sLineBreak +
'建置號: %d' + sLineBreak +
'平台 ID: %d' + sLineBreak +
'服務包: %s';
begin
OsInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(OsInfo);
ShowMessage(Format(s, [
OsInfo.dwMajorVersion,
OsInfo.dwMinorVersion,
OsInfo.dwBuildNumber,
OsInfo.dwPlatformId,
OsInfo.szCSDVersion
]));
end;

現代 Delphi 建議改用 TOSVersion record (System.SysUtils) 以支援 Windows 10/11 正確偵測。