判断操作系统的问题?

gf101xt 2009-11-19 10:21:09
在Delphi中,请问如何判断是XP操作系统还是win7操作系统?
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
大肚肥肥 2009-12-10
  • 打赏
  • 举报
回复
SysUtils 单元

Win32MajorVersion 主版本号

Win32MinorVersion 副版本号

gyk120 2009-11-19
  • 打赏
  • 举报
回复
用GetVersionEx,一个函数就够了
hjkto 2009-11-19
  • 打赏
  • 举报
回复
uses SHellApi;
procedure TForm1.Button1Click(Sender: TObject);

begin
ShellAboutW(0,'Timer v1.03','kedy版权所有',1);
end;
你在win7运行一下,看看出现什么?
我没有win7,所以没法测试
hjkto 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gf101xt 的回复:]
谢谢各位热心解答,其实只要简单判断系统就XP或者是WIN7就可以了
就是像下面这个
if 【判断是否是win7的代码】 then
begin
……
end
else
begin
……
end;

当然包括实现的函数
[/Quote]


上面的函数你改改
我在xp下可以取到
你在win7运行一下,看看有什么提示再说?
gf101xt 2009-11-19
  • 打赏
  • 举报
回复
谢谢各位热心解答,其实只要简单判断系统就XP或者是WIN7就可以了
就是像下面这个
if 【判断是否是win7的代码】 then
begin
……
end
else
begin
……
end;

当然包括实现的函数
apilove 2009-11-19
  • 打赏
  • 举报
回复
第二部分
  
if (not BRes) and (not NTBres) then
Exit;
Move( OSVI, OSVI_NT, SizeOf(TOSVersionInfo) );

case OSVI_NT.dwPlatformId of
VER_PLATFORM_WIN32_NT:
begin
if OSVI_NT.dwMajorVersion <= 4 then
Result := 'Windows NT ';
if (OSVI_NT.dwMajorVersion = 5) and (OSVI_NT.dwMinorVersion = 0) then
Result := 'Windows 2000 ';
if (OSVI_NT.dwMajorVersion = 5) and (OSVI_NT.dwMinorVersion = 1) then
Result := 'Windows XP ';
if (OSVI_NT.dwMajorVersion = 6) and (OSVI_NT.dwMinorVersion = 0) then
begin
Result := 'Windows Vista ';
if Assigned(GetProductInfo) then
begin
GetProductInfo( dwOSMajorVersion, dwOSMinorVersion,
dwSpMajorVersion, dwSpMinorVersion,
pdwReturnedProductType );
case pdwReturnedProductType of
PRODUCT_BUSINESS:
tmpStr := 'Business Edition';
PRODUCT_BUSINESS_N:
tmpStr := 'Business Edition';
PRODUCT_CLUSTER_SERVER:
tmpStr := 'Cluster Server Edition';
PRODUCT_DATACENTER_SERVER:
tmpStr := 'Server Datacenter Edition (full installation)';
PRODUCT_DATACENTER_SERVER_CORE:
tmpStr := 'Server Datacenter Edition (core installation)';
PRODUCT_ENTERPRISE:
tmpStr := 'Enterprise Edition';
PRODUCT_ENTERPRISE_N:
tmpStr := 'Enterprise Edition';
PRODUCT_ENTERPRISE_SERVER:
tmpStr := 'Server Enterprise Edition (full installation)';
PRODUCT_ENTERPRISE_SERVER_CORE:
tmpStr := 'Server Enterprise Edition (core installation)';
PRODUCT_ENTERPRISE_SERVER_IA64:
tmpStr := 'Server Enterprise Edition for Itanium-based Systems';
PRODUCT_HOME_BASIC:
tmpStr := 'Home Basic Edition';
PRODUCT_HOME_BASIC_N:
tmpStr := 'Home Basic Edition';
PRODUCT_HOME_PREMIUM:
tmpStr := 'Home Premium Edition';
PRODUCT_HOME_PREMIUM_N:
tmpStr := 'Home Premium Edition';
PRODUCT_HOME_SERVER:
tmpStr := 'Home Server Edition';
PRODUCT_SERVER_FOR_SMALLBUSINESS:
tmpStr := 'Server for Small Business Edition';
PRODUCT_SMALLBUSINESS_SERVER:
tmpStr := 'Small Business Server';
PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
tmpStr := 'Small Business Server Premium Edition';
PRODUCT_STANDARD_SERVER:
tmpStr := 'Server Standard Edition (full installation)';
PRODUCT_STANDARD_SERVER_CORE:
tmpStr := 'Server Standard Edition (core installation)';
PRODUCT_STARTER:
tmpStr := 'Starter Edition';
PRODUCT_STORAGE_ENTERPRISE_SERVER:
tmpStr := 'Storage Server Enterprise Edition';
PRODUCT_STORAGE_EXPRESS_SERVER:
tmpStr := 'Storage Server Express Edition';
PRODUCT_STORAGE_STANDARD_SERVER:
tmpStr := 'Storage Server Standard Edition';
PRODUCT_STORAGE_WORKGROUP_SERVER:
tmpStr := 'Storage Server Workgroup Edition';
PRODUCT_UNDEFINED:
tmpStr := 'An unknown product';
PRODUCT_ULTIMATE:
tmpStr := 'Ultimate Edition';
PRODUCT_ULTIMATE_N:
tmpStr := 'Ultimate Edition';
PRODUCT_WEB_SERVER:
tmpStr := 'Web Server Edition';
PRODUCT_UNLICENSED:
tmpStr := 'Unlicensed product'
else
tmpStr := '';
end;{ pdwReturnedProductType }
Result := Result + tmpStr;
NTBRes := FALSE;
end;{ GetProductInfo<>NIL }
end;{ Vista }
if NTBres then
begin
if OSVI_NT.wProductType = VER_NT_WORKSTATION then
begin
if OSVI_NT.wProductType = VER_NT_WORKSTATION then
begin
case OSVI_NT.wSuiteMask of
512: Result := Result + 'Personal';
768: Result := Result + 'Home Premium';
else
Result := Result + 'Professional';
end;
end
else if OSVI_NT.wProductType = VER_NT_SERVER then
begin
if OSVI_NT.wSuiteMask = VER_SUITE_DATACENTER then
Result := Result + 'DataCenter Server'
else if OSVI_NT.wSuiteMask = VER_SUITE_ENTERPRISE then
Result := Result + 'Advanced Server'
else
Result := Result + 'Server';
end;
end{ wProductType=VER_NT_WORKSTATION }
else
begin
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly('SYSTEM\CurrentControlSet\Control\ProductOptions') then
try
tmpStr := UpperCase(ReadString('ProductType'));
if tmpStr = 'WINNT' then
Result := Result + 'Workstation';
if tmpStr = 'SERVERNT' then
Result := Result + 'Server';
finally
CloseKey;
end;
finally
Free;
end;
end;{ wProductType<>VER_NT_WORKSTATION }
end;{ NTBRes }
end;{ VER_PLATFORM_WIN32_NT }
VER_PLATFORM_WIN32_WINDOWS:
begin
if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 0) then
begin
Result := 'Windows 95 ';
if OSVI.szCSDVersion[1] = 'C' then
Result := Result + 'OSR2';
end;
if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 10) then
begin
Result := 'Windows 98 ';
if OSVI.szCSDVersion[1] = 'A' then
Result := Result + 'SE';
end;
if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 90) then
Result := 'Windows Me';
end;{ VER_PLATFORM_WIN32_WINDOWS }
VER_PLATFORM_WIN32s:
Result := 'Microsoft Win32s';
else
Result := 'Unknown';
end;{ OSVI_NT.dwPlatformId }
end;{ GetOSInfo }

initialization
@GetProductInfo := GetProcAddress(GetModuleHandle('KERNEL32.DLL'),
'GetProductInfo');

end.
apilove 2009-11-19
  • 打赏
  • 举报
回复
第一部分
unit 
GetWinVersionInfo;

type
_OSVERSIONINFOEX = record
dwOSVersionInfoSize : DWORD;
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
dwPlatformId : DWORD;
szCSDVersion : array[0..127] of AnsiChar;
wServicePackMajor : WORD;
wServicePackMinor : WORD;
wSuiteMask : WORD;
wProductType : BYTE;
wReserved : BYTE;
end;
TOSVERSIONINFOEX = _OSVERSIONINFOEX;

function GetVersionExA(var lpVersionInformation: TOSVersionInfoEX): BOOL;
stdcall; external kernel32;

const
VER_NT_WORKSTATION :Integer = 1;
VER_SUITE_ENTERPRISE :Integer = 2;
VER_NT_SERVER :Integer = 3;
VER_SUITE_DATACENTER :Integer = 128;
VER_SUITE_PERSONAL :Integer = 512;

const
PRODUCT_BUSINESS = $00000006; {Business Edition}
PRODUCT_BUSINESS_N = $00000010; {Business Edition}
PRODUCT_CLUSTER_SERVER = $00000012; {Cluster Server Edition}
PRODUCT_DATACENTER_SERVER = $00000008; {Server Datacenter Edition
(full installation)}
PRODUCT_DATACENTER_SERVER_CORE = $0000000C; {Server Datacenter Edition
(core installation)}
PRODUCT_ENTERPRISE = $00000004; {Enterprise Edition}
PRODUCT_ENTERPRISE_N = $0000001B; {Enterprise Edition}
PRODUCT_ENTERPRISE_SERVER = $0000000A; {Server Enterprise Edition
(full installation)}
PRODUCT_ENTERPRISE_SERVER_CORE = $0000000E; {Server Enterprise Edition
(core installation)}
PRODUCT_ENTERPRISE_SERVER_IA64 = $0000000F; {Server Enterprise Edition
for Itanium-based Systems}
PRODUCT_HOME_BASIC = $00000002; {Home Basic Edition}
PRODUCT_HOME_BASIC_N = $00000005; {Home Basic Edition}
PRODUCT_HOME_PREMIUM = $00000003; {Home Premium Edition}
PRODUCT_HOME_PREMIUM_N = $0000001A; {Home Premium Edition}
PRODUCT_HOME_SERVER = $00000013; {Home Server Edition}
PRODUCT_SERVER_FOR_SMALLBUSINESS = $00000018; {Server for Small Business
Edition}
PRODUCT_SMALLBUSINESS_SERVER = $00000009; {Small Business Server}
PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = $00000019; {Small Business Server
Premium Edition}
PRODUCT_STANDARD_SERVER = $00000007; {Server Standard Edition
(full installation)}
PRODUCT_STANDARD_SERVER_CORE = $0000000D; {Server Standard Edition
(core installation)}
PRODUCT_STARTER = $0000000B; {Starter Edition}
PRODUCT_STORAGE_ENTERPRISE_SERVER = $00000017; {Storage Server Enterprise
Edition}
PRODUCT_STORAGE_EXPRESS_SERVER = $00000014; {Storage Server Express
Edition}
PRODUCT_STORAGE_STANDARD_SERVER = $00000015; {Storage Server Standard
Edition}
PRODUCT_STORAGE_WORKGROUP_SERVER = $00000016; {Storage Server Workgroup
Edition}
PRODUCT_UNDEFINED = $00000000; {An unknown product}
PRODUCT_ULTIMATE = $00000001; {Ultimate Edition}
PRODUCT_ULTIMATE_N = $0000001C; {Ultimate Edition}
PRODUCT_WEB_SERVER = $00000011; {Web Server Edition}
PRODUCT_UNLICENSED = $ABCDABCD; {Unlicensed product}

var
{$EXTERNALSYM GetProductInfo}
GetProductInfo: function (dwOSMajorVersion, dwOSMinorVersion,
dwSpMajorVersion, dwSpMinorVersion: DWORD;
var pdwReturnedProductType: DWORD): BOOL stdcall = NIL;

function GetOSInfo: string;
var
NTBres, BRes: Boolean;
OSVI: TOSVERSIONINFO;
OSVI_NT: TOSVERSIONINFOEX;
tmpStr: string;
dwOSMajorVersion, dwOSMinorVersion,
dwSpMajorVersion, dwSpMinorVersion,
pdwReturnedProductType : DWORD;
begin
Result := 'Error';
NTBRes := FALSE;
try
OSVI_NT.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFOEX);
NTBRes := GetVersionExA(OSVI_NT);
OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
BRes := GetVersionEx(OSVI);
except
OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
BRes := GetVersionEx(OSVI);
end;
hjkto 2009-11-19
  • 打赏
  • 举报
回复

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;
没有win7,测试不了,不过上面的系统,这个代码全能判断出
hjkto 2009-11-19
  • 打赏
  • 举报
回复
去注册表中找找看
hjkto 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yktd26 的回复:]
Delphi(Pascal) codefunction GetOSVersion:String;var OSVersion:TOSVersionInfo;begin
OSVersion.dwOSVersionInfoSize:=SizeOf(OSVersion);
GetVersionEx(OSVersion);case OSVersion.dwPlatformIdof
VER_PLATFORM_WIN32_WINDOWS: Result:='WIN';
VER_PLATFORM_WIN32_NT: Result:='NT';else Result:='WIN32';end;
Result:=Result+IntToStr(OSVersion.dwMajorVersion)+'.'+IntToStr(OSVersion.dwMinorVersion);end;
xp应该是返回NT5.1或者NT5.0
Win7是NT6.1
Vista是NT6.0
[/Quote]
厉害
yktd26 2009-11-19
  • 打赏
  • 举报
回复
function GetOSVersion:String;
var OSVersion:TOSVersionInfo;
begin
OSVersion.dwOSVersionInfoSize:=SizeOf(OSVersion);
GetVersionEx(OSVersion);
case OSVersion.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: Result:='WIN';
VER_PLATFORM_WIN32_NT: Result:='NT';
else Result:='WIN32';
end;
Result:=Result+IntToStr(OSVersion.dwMajorVersion)+'.'+IntToStr(OSVersion.dwMinorVersion);
end;

xp应该是返回NT5.1或者NT5.0
Win7是NT6.1
Vista是NT6.0
无条件为你 2009-11-19
  • 打赏
  • 举报
回复
zhangxiaommmm啊,好久不见!

1,184

社区成员

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

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