procedure TAboutForm.SetSysInfo;
const
WIN32S = 'Windows 3.1x running Win32s';
WIN32WINDOWS = 'Windows 95';
WIN32NT = 'Windows NT';
FORMATOSSTR = '%s %d.%d ';
var
VI: TOSVersionInfo;
SI: TSystemInfo;
MS: TMemoryStatus;
begin
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);
case VI.dwPlatformId of
VER_PLATFORM_WIN32S:
lblOS.Caption := Format(FORMATOSSTR, [WIN32S, VI.dwMajorVersion,
VI.dwMinorVersion]);
VER_PLATFORM_WIN32_WINDOWS:
lblOS.Caption := Format(FORMATOSSTR, [WIN32WINDOWS, VI.dwMajorVersion,
VI.dwMinorVersion]);
VER_PLATFORM_WIN32_NT:
lblOS.Caption := Format(FORMATOSSTR, [WIN32NT, VI.dwMajorVersion,
VI.dwMinorVersion]);
end;
end;
const
WIN32S = 'Windows 3.1x running Win32s';
WIN32WINDOWS = 'Windows 95';
WIN32NT = 'Windows NT';
FORMATOSSTR = '%s %d.%d ';
var
VI: TOSVersionInfo;
SI: TSystemInfo;
MS: TMemoryStatus;
begin
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);
case VI.dwPlatformId of
VER_PLATFORM_WIN32S:
lblOS.Caption := Format(FORMATOSSTR, [WIN32S, VI.dwMajorVersion,
VI.dwMinorVersion]);
VER_PLATFORM_WIN32_WINDOWS:
lblOS.Caption := Format(FORMATOSSTR, [WIN32WINDOWS, VI.dwMajorVersion,
VI.dwMinorVersion]);
VER_PLATFORM_WIN32_NT:
lblOS.Caption := Format(FORMATOSSTR, [WIN32NT, VI.dwMajorVersion,
VI.dwMinorVersion]);
end;
end;
var
VI: TOSVersionInfo;
begin
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);
with InfoLB.Items, VI do
begin
Clear;
Add(Format(SOSVer, [dwMajorVersion, dwMinorVersion]));
Add(Format(SBuildNo, [LoWord(dwBuildNumber)]));
case dwPlatformID of
VER_PLATFORM_WIN32S: Add(Format(SOSPlat, [SOSWin32s]));
VER_PLATFORM_WIN32_WINDOWS: Add(Format(SOSPlat, [SOSWin95]));
VER_PLATFORM_WIN32_NT: Add(Format(SOSPlat, [SOSWinNT]));
end;
end;
end;
(Delphi 6)case Win32Platform ofVER_PLATFORM_WIN32_WINDOWS:ShowMessage ('Windows 9x');VER_PLATFORM_WIN32_NT:ShowMessage ('Windows NT');end;ShowMessage ('Running on Windows:'+IntToStr (Win32MajorVersion)+'.'+ IntToStr (Win32MinorVersion)+' ((Build '+IntToStr (Win32BuildNumber)+')'+#10#13 +'Update:'+Win32CSDVersion);没有理由再调用GetVersion或者GetVersionEx了。
//获得操作系统版本号************************************************************
//==============================================================================
function GetWindowsVersion(var Major, Minor: integer): string;
var
{$IFDEF WIN32}
lpOS, lpOS2: POsVersionInfo;
OSVerProc: function(lpOs: pointer): BOOL; stdcall;
OSVerHandle: THandle;
{$ELSE}
lp: longint;
{$ENDIF}
begin
{$IFDEF WIN32}
GetMem(lpOS, SizeOf(TOsVersionInfo));
lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
//============================================================================
//调用DLL例程*****************************************************************
//============================================================================
OSVerHandle := LoadLibrary('kernel32');
if OSVerHandle<=0
then raise Exception.Create('动态链接库kernel32加载失败,错误代码:'+IntToStr(GetLastError))
else @OSVerProc := GetProcAddress(OSVerHandle, 'GetVersionExA');
if not Assigned(OSVerProc)
then raise Exception.Create('动态链接库kernel32函数GetVersionExA加载失败,错误代码:'+IntToStr(GetLastError))
else while not OSVerProc(lpOS) do
begin
GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1);
lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1;
FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
lpOS := lpOs2;
end;
Major := lpOs^.dwMajorVersion;
Minor := lpOs^.dwMinorVersion;
FreeLibrary(OSVerHandle);
FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
{$ELSE}
lp := GetVersion;
Major := LoByte(LoWord(lp));
Minor := HiByte(LoWord(lp));
{$ENDIF}
case Win32Platform of
VER_PLATFORM_WIN32_WINDOWS: Result := 'Win9x';
VER_PLATFORM_WIN32_NT: Result := 'WinNT';
end;
end;