const strOsType: array[0..7] of string=('osUnknown','osWin95','osWin98','osWin98se','osWinme','osWinnt4','osWin2k','osWinxp'); type OSType=(osUnknown,osWin95,osWin98,osWin98se,osWinme,osWinnt4,osWin2k,osWinxp);Function GetOSVersion : OSType; Var osVerInfo : TOSVersionInfo; majorVer, minorVer : Integer; Begin //Result := osUnknown; 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 := osWinnt4 Else If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then Result := osWin2k Else If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then Result := osWinxp Else Result := OsUnknown; End; VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME } Begin If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then Result := osWin95 Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then Result := osWin98se Else Result := osWin98; End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then Result := OsWinME Else Result := OsUnknown; End; Else Result := OsUnknown; End; //end of case End Else Result := OsUnknown;End;procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(strOsType[integer(GetOSVersion)]); end;
procedure TForm1.GetSysInfo; var PlatForm:String; BuildNumber:Integer; begin case Win32PlatForm of VER_PLATFORM_WIN32_WINDOWS: begin PlatForm:='Windows 98'; BuildNumber:=Win32BuildNumber and $0000FFFF; end; VER_PLATFORM_WIN32_NT: begin PlatForm:='Windows 2000'; BuildNumber:=Win32BuildNumber; end else begin PlatForm:='Windows'; BuildNumber:=0; end; end; if (Win32PlatForm = VER_PLATFORM_WIN32_WINDOWS) or (Win32PlatForm = VER_PLATFORM_WIN32_NT) then begin if Win32CSDVersion = '' then lblSystem.Caption:=Format('%s %d.%d(Build %d)',[PlatForm,Win32MajorVersion,Win32MinorVersion,BuildNumber]) else lblSystem.Caption:=Format('%s %d.%d(Build %d:%s)',[PlatForm,Win32MajorVersion,Win32MinorVersion,BuildNumber,Win32CSDVersion]); end else lblSystem.Caption:=Format('%s %d.%d',[PlatForm,Win32MajorVersion,Win32MinorVersion]); end; 适当的添加一点代码,就可以辨别三个系统了!
类似方法
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Registry;type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
OSVI: OSVERSIONINFO;
begin
OSVI.dwOSversioninfoSize := Sizeof(OSVERSIONINFO);
GetVersionEx(OSVI);
label1.Caption := IntToStr(OSVI.dwMajorVersion) + ','
+ IntToStr(OSVI.dwMinorVersion) + ','
+ IntToStr(OSVI.dwBuildNumber) + ','
+ IntToStr(OSVI.dwPlatformId) + ','
+ OSVI.szCSDVersion;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
Edit1.Text := '当前路径:' + Reg.CurrentPath;
Edit2.Text := '产品系列号:' + Reg.ReadString('ProductId');
Edit3.Text := '产品名:' + Reg.ReadString('ProductName');//这个就是你要的
Edit4.Text := '注册公司名称:' + Reg.ReadString('RegisteredOrganization');
Edit5.Text := '用户名:' + Reg.ReadString('RegisteredOwner');
Edit6.Text := '软件类型:' + Reg.ReadString('SoftwareType');
Reg.CloseKey;
Reg.Free;
end;
end.
可以通过Windows API函数GetVersionEx来获得。
具体程序如下:
Procedure Tform1.Button1Click(sender:TObject);
Var()
OSVI:OSVERSIONINFO;
begin()
OSVI.dwOSversioninfoSize:=Sizeof(OSVERSIONINFO);
GetVersionEx(OSVI);
label1.Caption:=IntToStr(OSVI.dwMinorVersion)+','
+IntToStr(OSVI.dwMinorVersion)+','
+IntToStr(OSVI.dwBuildNumber)+','
+IntToStr(OSVI.dwPlatformId)+','
+OSVI.szCSDVersion;
end; end.
type OSType=(osUnknown,osWin95,osWin98,osWin98se,osWinme,osWinnt4,osWin2k,osWinxp);Function GetOSVersion : OSType;
Var
osVerInfo : TOSVersionInfo;
majorVer, minorVer : Integer;
Begin //Result := osUnknown;
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 := osWinnt4
Else
If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then
Result := osWin2k
Else
If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then
Result := osWinxp
Else
Result := OsUnknown;
End;
VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME }
Begin If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then
Result := osWin95
Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then
Begin
If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then
Result := osWin98se
Else
Result := osWin98;
End
Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then
Result := OsWinME
Else
Result := OsUnknown; End;
Else
Result := OsUnknown;
End; //end of case
End Else
Result := OsUnknown;End;procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(strOsType[integer(GetOSVersion)]);
end;
var
PlatForm:String;
BuildNumber:Integer;
begin
case Win32PlatForm of
VER_PLATFORM_WIN32_WINDOWS:
begin
PlatForm:='Windows 98';
BuildNumber:=Win32BuildNumber and $0000FFFF;
end;
VER_PLATFORM_WIN32_NT:
begin
PlatForm:='Windows 2000';
BuildNumber:=Win32BuildNumber;
end
else
begin
PlatForm:='Windows';
BuildNumber:=0;
end;
end;
if (Win32PlatForm = VER_PLATFORM_WIN32_WINDOWS) or (Win32PlatForm = VER_PLATFORM_WIN32_NT) then
begin
if Win32CSDVersion = '' then
lblSystem.Caption:=Format('%s %d.%d(Build %d)',[PlatForm,Win32MajorVersion,Win32MinorVersion,BuildNumber])
else
lblSystem.Caption:=Format('%s %d.%d(Build %d:%s)',[PlatForm,Win32MajorVersion,Win32MinorVersion,BuildNumber,Win32CSDVersion]);
end
else
lblSystem.Caption:=Format('%s %d.%d',[PlatForm,Win32MajorVersion,Win32MinorVersion]);
end;
适当的添加一点代码,就可以辨别三个系统了!