//get windows platform version information const cOsUnknown = $00000000 ; cOsWin31 = $00000010 ; cOsWin95 = $00000020 ; cOsWin95OSR2 = $00000022 ; cOsWin98 = $00000030 ; cOsWin98SE = $00000032 ; cOsWinME = $00000040 ; cOsWinNT = $00000050 ; // cOsWinNT351 = $00000053; // cOsWinNT40 = $00000055; cOsWin2000 = $00000060 ; cOsWinXP = $00000070; cOsWinServer = $00000080; function GetOSVersionEx : Integer; var osVerInfo : TOSVersionInfo; majorVer, minorVer : Integer; begin Result := cOsUnknown; osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); if GetVersionEx(osVerInfo) then begin majorVer := osVerInfo.dwMajorVersion; minorVer := osVerInfo.dwMinorVersion; case osVerInfo.dwPlatformId of VER_PLATFORM_WIN32S : Result := cOsWin31 ; // win31 VER_PLATFORM_WIN32_WINDOWS : // win95/98/me case minorVer of 0 : if OsVerInfo.szCSDVersion = 'C' then Result := cOsWin95OSR2 else Result := cOsWin95 ; 10 : if OsVerInfo.szCSDVersion = 'A' then Result := cOsWin98SE else Result := cOsWin98 ; 90 : Result := cOsWinMe ; end; VER_PLATFORM_WIN32_NT : // Windows NT/2000/XP/Server 2003 family case majorVer of 3 : Result := cOsWinNT ; //Result := cOsWinNT351 ; 4 : Result := cOsWinNT ; //Result := cOsWinNT40 ; 5 : case minorVer of 0 : Result := cOsWin2000 ; 1 : Result := cOsWinXP ; 2 : Result := cOsWinServer end ; end; end; end; end; enjoy. adayuer
Function GetOSVersion : Integer; Var osVerInfo : TOSVersionInfo; majorVer, minorVer : Integer; Begin Result := cOsUnknown; osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); If ( GetVersionEx(osVerInfo) ) Then Begin majorVer := osVerInfo.dwMajorVersion; minorVer := osVerInfo.dwMinorVersion; Case ( osVerInfo.dwPlatformId ) Of VER_PLATFORM_WIN32_NT : { Windows NT/2000 } Begin If ( majorVer <= 4 ) Then Result := cOsWinNT Else If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then Result := cOsWin2000 Else If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then Result := cOsWhistler Else Result := cOsUnknown; End; VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME } Begin If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then Result := cOsWin95 Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then Result := cOsWin98SE Else Result := cOsWin98; End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then Result := cOsWinME Else Result := cOsUnknown; End; Else Result := cOsUnknown; End; End Else Result := cOsUnknown; End;
/// 返回注册表中相关Windows系统版本信息
/// </summary>
/// <returns> Windows系统版本信息 </returns>
function GetSystemVer: string;
begin
FRegEdit.RootKey := HKEY_LOCAL_MACHINE;
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
FRegEdit.OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
if Win32Platform = VER_PLATFORM_WIN32_NT then
FRegEdit.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
Result := FRegEdit.ReadString('ProductName');
FRegEdit.CloseKey;
end;
FRegEdit.RootKey := HKEY_LOCAL_MACHINE; <---- 注意这个如果是Win32Platform = VER_PLATFORM_WIN32_WINDOWS就从注册表中取
'Software\Microsoft\Windows\CurrentVersion' 中ProductName的值
如果是Win32Platform = VER_PLATFORM_WIN32_NT 就从注册表中取
'Software\Microsoft\Windows NT\CurrentVersion'中ProductName的值
const
cOsUnknown = $00000000 ;
cOsWin31 = $00000010 ;
cOsWin95 = $00000020 ;
cOsWin95OSR2 = $00000022 ;
cOsWin98 = $00000030 ;
cOsWin98SE = $00000032 ;
cOsWinME = $00000040 ;
cOsWinNT = $00000050 ;
// cOsWinNT351 = $00000053;
// cOsWinNT40 = $00000055;
cOsWin2000 = $00000060 ;
cOsWinXP = $00000070;
cOsWinServer = $00000080;
function GetOSVersionEx : Integer;
var
osVerInfo : TOSVersionInfo;
majorVer, minorVer : Integer;
begin
Result := cOsUnknown;
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32S : Result := cOsWin31 ; // win31
VER_PLATFORM_WIN32_WINDOWS : // win95/98/me
case minorVer of
0 : if OsVerInfo.szCSDVersion = 'C' then
Result := cOsWin95OSR2
else
Result := cOsWin95 ;
10 : if OsVerInfo.szCSDVersion = 'A' then
Result := cOsWin98SE
else
Result := cOsWin98 ;
90 : Result := cOsWinMe ;
end;
VER_PLATFORM_WIN32_NT : // Windows NT/2000/XP/Server 2003 family
case majorVer of
3 : Result := cOsWinNT ;
//Result := cOsWinNT351 ;
4 : Result := cOsWinNT ;
//Result := cOsWinNT40 ;
5 : case minorVer of
0 : Result := cOsWin2000 ;
1 : Result := cOsWinXP ;
2 : Result := cOsWinServer
end ;
end;
end;
end;
end;
enjoy.
adayuer
Var
osVerInfo : TOSVersionInfo;
majorVer, minorVer : Integer;
Begin
Result := cOsUnknown;
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
If ( GetVersionEx(osVerInfo) ) Then Begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
Case ( osVerInfo.dwPlatformId ) Of
VER_PLATFORM_WIN32_NT : { Windows NT/2000 }
Begin
If ( majorVer <= 4 ) Then
Result := cOsWinNT
Else
If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then
Result := cOsWin2000
Else
If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then
Result := cOsWhistler
Else
Result := cOsUnknown;
End;
VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME }
Begin
If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then
Result := cOsWin95
Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin
If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then
Result := cOsWin98SE
Else
Result := cOsWin98;
End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then
Result := cOsWinME
Else
Result := cOsUnknown;
End;
Else
Result := cOsUnknown;
End;
End Else
Result := cOsUnknown;
End;
Registry...
FRegEdit: TRegistry;就是操作注册表的那个对象
/// 获取PC基础信息
/// 1.操作系统版本名称
/// </summary>
/// <author> wangjun </author>
/// <date> 2004-06-14 </date>
unit SystemInfo;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, MMDefault;type
TMMSystemInfo = class (TComponent)
private
FAbout: TMMAboutString;
FActive: Boolean;
FRegEdit: TRegistry;
FWindowsProductName: string;
procedure SetActive(const Value: Boolean);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetSystemVer: string;
published
property About: TMMAboutString read FAbout write FAbout;
property Active: Boolean read FActive write SetActive default False;
property WindowsProductName: string read FWindowsProductName write
FWindowsProductName;
end;
implementation{ TMMSystemInfo }{
******************************** TMMSystemInfo *********************************
}
constructor TMMSystemInfo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FRegEdit := TRegistry.Create;
end;destructor TMMSystemInfo.Destroy;
begin
FRegEdit.Free;
inherited Destroy;
end;/// <summary>
/// 返回注册表中相关Windows系统版本信息
/// </summary>
/// <returns> Windows系统版本信息 </returns>
function TMMSystemInfo.GetSystemVer: string;
begin
FRegEdit.RootKey := HKEY_LOCAL_MACHINE;
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
FRegEdit.OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
if Win32Platform = VER_PLATFORM_WIN32_NT then
FRegEdit.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
Result := FRegEdit.ReadString('ProductName');
FRegEdit.CloseKey;
end;procedure TMMSystemInfo.SetActive(const Value: Boolean);
begin
if Value then
begin
FWindowsProductName := GetSystemVer;
FActive := True;
end
else begin
FWindowsProductName := '';
FActive := False;
end;
end;end.这是全部的源代码..... 当然如果想放到Delphi IDE 组件列表中还要用到一个注册文件不过我想这些代码足够解决这个问题了...