如何知道程序运行的Windows操作系统的版本? (100分)

  • 主题发起人 主题发起人 honestman
  • 开始时间 开始时间
H

honestman

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:98、ME、NT、2000、XP等等。
 
if uppercase(copy(trim(APIThing.OSVersion),1,10))='WINDOWS NT'
我有这个单元,但是只能知道操作系统是NT或者98,你要的话留下邮箱
 
unit Unit1;

interface

uses
; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
; Dialogs, StdCtrls;

type
; TMainForm = class(TForm)
; ; Label1: TLabel;
; ; procedure FormShow(Sender: TObject);
; private
; ; ; procedure GetOSVersionInfo;
; ; { Private declarations }
; public
; ; { Public declarations }
; end;
type
; SystemInfoRecord = record
; ; Version,
; ; Plattform ; ; ; ; : string;
; ; PlattId ; ; ; ; ; : DWORD;
; ; {- Property Section }
; end;
var
; MainForm: TMainForm;
; ;OSVerInfo: TOSVersionInfo;
; ;SysInfoRec: SystemInfoRecord;

implementation

{$R *.dfm}
procedure TMainForm.GetOSVersionInfo;

; function Plat(Pl: DWORD): string;
; begin
; ; case Pl of
; ; ; VER_PLATFORM_WIN32s: ; ; ; ;result := 'Win32s on Windows 3.1';
; ; ; VER_PLATFORM_WIN32_WINDOWS: result := 'Win32 on Windows 95';
; ; ; VER_PLATFORM_WIN32_NT: ; ; ;result := 'Windows NT';
; ; ; else ; ; ; ; ; ; ; ; ; ; ; ;result := '???';
; ; end;
; end;

begin

; with OSVerInfo, SysInfoRec do begin
; ; dwOSVersionInfoSize := SizeOf(OSVerInfo);
; ; if GetVersionEx(OSVerInfo) then;
; ; Version := Format('%d.%d (%d.%s)',[dwMajorVersion, dwMinorVersion,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; (dwBuildNumber and $FFFF), szCSDVersion]);
; ; Plattform := Plat(dwPlatformId);
; ; PlattID ; := dwPlatformId;
; end;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
; GetOSVersionInfo;
; with SysInfoRec do
; label1.caption:=Format('Version %s ;Platform: %s', [Version, Plattform] );
end;

end.
 
怎么知道是2000,还是XP啊?
 
{$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;

;
 
没看前面写的,但在WIN98的注册表中“我的电脑/HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion”中可以找到你想要的所有内容!
 
可以通过读取注册表,其他的方法没有研究过!
 
太麻烦了吧! Delphi早就为你写好了:
在SysUtils单元有下面几个变量:
Win32PlatForm
Win32MajorVersion
Win32MinorVersion
Win32BuildNumber
一看就明白了吧? 不明白就去SysUtils单元中看看注释。
 
再说一下:
Win32PlatForm 能分出下面三种:
; ; VER_PLATFORM_WIN32s
; ; VER_PLATFORM_WIN32_WINDOWS: 95、98、ME
; ; VER_PLATFORM_WIN32_NT: NT、2000、XP
当然是根据版本号才能分这些了。
 
接受答案了.
 
后退
顶部