判别系统类型!(10分)

  • 主题发起人 主题发起人 Carem
  • 开始时间 开始时间
C

Carem

Unregistered / Unconfirmed
GUEST, unregistred user!
是否有相关文章或思路?最好可以提供原代码,我自己看就可以明白了!谢谢各位!
 
用API GetVersion ,不过结果被编码了:
Type
TGetVer = record
WinVer,
WinRev,
DosRev,
DosVer: Byte;
end;
const
VerStr = '%d.%d';
procedure TForm1.Button1Click(Sender: TObject);
var
AllVersions: TGetVer;
begin
AllVersions := TGetVer(GetVersion);
Edit1.Text := Format(VerStr, [AllVersions.WinVer, AllVersions.WinRev]);
Edit2.Text := Format(VerStr, [AllVersions.DOSVer, AllVersions.DOSRev]);
end;
注:返回的版本和真实版本未必相同;
Note2: Win32应用程序需要用GetVersionEx



--------------------------------------------------------------------------------
{$IFDEF WIN32}
function GetVersionEx(lpOs : pointer) : BOOL; stdcall;
external 'kernel32' name 'GetVersionExA';
{$ENDIF}

procedure GetWindowsVersion(var Major : integer;
var Minor : integer);
var
{$IFDEF WIN32}
lpOS, lpOS2 : POsVersionInfo;
{$ELSE}
l : longint;
{$ENDIF}
begin
{$IFDEF WIN32}
GetMem(lpOS, SizeOf(TOsVersionInfo));
lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
while getVersionEx(lpOS) = false 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;
FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
{$ELSE}
l := GetVersion;
Major := LoByte(LoWord(l));
Minor := HiByte(LoWord(l));
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Major : integer;
Minor : integer;
begin
GetWindowsVersion(Major, Minor);
Memo1.Lines.Add(IntToStr(Major));
Memo1.Lines.Add(IntToStr(Minor));
end;



--------------------------------------------------------------------------------
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
ShowMessage('win9x');
if Win32Platform = VER_PLATFORM_WIN32_NT then
ShowMessage('winNT');



--------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
OS : TOSVersionInfo;
begin
OS.dwOSVersionInfoSize := sizeof(OS);
GetVersionEx(OS);
with OS do
case dwPlatformId of
VER_PLATFORM_WIN32s :
label1.caption := 'Windows 3.1x/32s';
VER_PLATFORM_WIN32_WINDOWS :
Begin
if (dwMajorVersion = 4) and (dwMinorVersion > 0) then
label1.caption := 'Windows 98'
else
label1.caption := 'Windows 95';
end;
VER_PLATFORM_WIN32_NT :
label1.caption := 'Windows NT' ;
end;
end;



--------------------------------------------------------------------------------


Const

cOsUnknown : Integer = -1;

cOsWin95 : Integer = 0;

cOsWin98 : Integer = 1;

cOsWin98SE : Integer = 2;

cOsWinME : Integer = 3;

cOsWinNT : Integer = 4;

cOsWin2000 : Integer = 5;

cOsWhistler : Integer = 6;



Function GetOSVersion : Integer;

Function GetOSName( OSCode : Integer ) : String;



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;



Function GetOSName( OSCode : Integer ) : String;

Begin

If ( OSCode = cOsUnknown ) Then

Result := '(sconosciuto)'

Else If ( OSCode = cOsWin95 ) Then

Result := 'Microsoft Windows 95'

Else If ( OSCode = cOsWin98 ) Then

Result := 'Microsoft Windows 98'

Else If ( OSCode = cOsWin98SE ) Then

Result := 'Microsoft Windows 98 Second Edition'

Else If ( OSCode = cOsWinME ) Then

Result := 'Microsoft Windows Millennium Edition'

Else If ( OSCode = cOsWinNT ) Then

Result := 'Microsoft Windows New Technology'

Else If ( OSCode = cOsWin2000 ) Then

Result := 'Microsoft Windows 2000 / NT 5'

Else

Result := 'Microsoft Windows';

End;


 
接受答案了.
 
后退
顶部