我还真是笨蛋啊,还没搞懂怎么获得当前操作系统的版本....

igand 2002-11-14 06:04:20
真笨。HOHO,那位大哥能给个具体的程序
Win32PlatForm这个还是用不来啊,唉。死了算了
...全文
42 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiaobai 2002-11-16
  • 打赏
  • 举报
回复
收藏...
Delphicfan 2002-11-15
  • 打赏
  • 举报
回复
靠!他们写的代码那么长。看看下面我写的。

procedure TForm1.Button1Click(Sender:TObject);
var
OSVI:OSVERSIONINFO;
begin
//设置版本信息结构的大小
OSVI.dwOSVersioninfoSize:=sizeof(OSVERSIONINFO);
//获取版本信息
GetVersionEx(OSVI);
//先是信息
Edit.Text:=IntToStr(OSVI.dwMajorVersion)+'.'
+IntToStr(OSVI.dwMinorVersion)+'.'
+IntToStr(OSVI.dwBuildNumber)+'.'
+IntToStr(OSVI.dwPlatformld)+'.'
+OSVI.szCSDVersion;
end;

web700 2002-11-14
  • 打赏
  • 举报
回复
为不什么不用搜索注册表的方法呀!
简单快速!
shuixin13 2002-11-14
  • 打赏
  • 举报
回复
下面的代码可以检查所用的系统是不是windows xp
uses Registry;
...

function IsWinXP: Boolean;
begin
Result := False;
if Win32Platform = VER_PLATFORM_WIN32_NT then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly('\Software\Microsoft\Windows NT\CurrentVersion') then
Result := (ReadString('ProductName') = 'Microsoft Windows XP');
finally
Free;
end;
end;

//rock
//转载请保留此信息
shuixin13 2002-11-14
  • 打赏
  • 举报
回复
用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;


Ailu2002 2002-11-14
  • 打赏
  • 举报
回复
试试吧!!
function Tform1.GetWindowsVersion : string;
var
WindowsInfo : TOSVersionInfo;
begin
WindowsInfo.dwOSVersionInfoSize := sizeof (OSVERSIONINFO);
GetVersionEx(WindowsInfo);
case WindowsInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT:
begin
if ( WindowsInfo.dwMajorVersion <= 4 ) then
result := 'Microsoft Windows NT';
if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion = 0)) then
result := 'Microsoft Windows 2000'
else if (( WindowsInfo.dwMajorVersion = 5 ) and (WindowsInfo.dwMinorVersion > 1)) then
result := 'Microsoft Windows XP';
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 0))) then
result := 'Microsoft Windows 98'
else if ((WindowsInfo.dwMajorVersion > 4) or ((WindowsInfo.dwMajorVersion = 4) and (WindowsInfo.dwMinorVersion = 90))) then
result := 'Microsoft Windows ME'
else
result := 'Microsoft Windows 95';
end;
else
result := 'Win32s';
end;
end;
igand 2002-11-14
  • 打赏
  • 举报
回复
我是初学的.....不懂.....楼上的说清楚点....多谢
RamjetZhang 2002-11-14
  • 打赏
  • 举报
回复
GetVersion in kernel32
igand 2002-11-14
  • 打赏
  • 举报
回复
找过了,全都删了啊
wxjh 2002-11-14
  • 打赏
  • 举报
回复
呵呵~~同情,不过就是一个函数而已阿
CloneCenter 2002-11-14
  • 打赏
  • 举报
回复
搜索一下论坛,有很多例子的。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧