分享
 
 
 

获得Windows的版本信息。

王朝delphi·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

最近写控件,因为想加入版本信息,而通常大多数情况下,几乎所有的公司或个人都会在自己软件的版本信息里提及Windows与内存信息。

参考MSDN的范例,我把它写成个函数了。由于Delphi6不提供OSVERSIONINFOEX结构(我没用过delphi7,8,2005等,不知道是否开始提供这个结构了),所以只好自己定义一个。为了不会受到有的版本里已经提供这个结构的影响,也不影响别的什么地方,直接把它定义到函数内部了。

函数:(2000,XP下测试通过,有其它版本的兄弟可以测试一下,有问题,发消息给我)

function GetVersionInfo(var SProduct, SVersion, SServicePack :String):BOOL;

type

_OSVERSIONINFOEXA = 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;

_OSVERSIONINFOEXW = record

dwOSVersionInfoSize: DWORD;

dwMajorVersion: DWORD;

dwMinorVersion: DWORD;

dwBuildNumber: DWORD;

dwPlatformId: DWORD;

szCSDVersion: array[0..127] of WideChar;

wServicePackMajor: WORD;

wServicePackMinor: WORD;

wSuiteMask: Word;

wProductType: Byte;

wReserved: Byte;

end;

{ this record only support Windows 4.0 SP6 and latter , Windows 2000 ,XP, 2003 }

OSVERSIONINFOEXA = _OSVERSIONINFOEXA;

OSVERSIONINFOEXW = _OSVERSIONINFOEXW;

OSVERSIONINFOEX = OSVERSIONINFOEXA;

const

VER_PLATFORM_WIN32_CE = 3;

{ wProductType defines }

VER_NT_WORKSTATION = 1;

VER_NT_DOMAIN_CONTROLLER = 2;

VER_NT_SERVER = 3;

{ wSuiteMask defines }

VER_SUITE_SMALLBUSINESS = $0001;

VER_SUITE_ENTERPRISE = $0002;

VER_SUITE_BACKOFFICE = $0004;

VER_SUITE_TERMINAL = $0010;

VER_SUITE_SMALLBUSINESS_RESTRICTED = $0020;

VER_SUITE_DATACENTER = $0080;

VER_SUITE_PERSONAL = $0200;

VER_SUITE_BLADE = $0400;

VER_SUITE_SECURITY_APPLIANCE = $1000;

var

Info: OSVERSIONINFOEX;

bEx: BOOL;

begin

Result := False;

FillChar(Info, SizeOf(OSVERSIONINFOEX), 0);

Info.dwOSVersionInfoSize := SizeOf(OSVERSIONINFOEX);

bEx := GetVersionEx(POSVERSIONINFO(@Info)^);

if not bEx then

begin

Info.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);

if not GetVersionEx(POSVERSIONINFO(@Info)^) then Exit;

end;

with Info do

begin

SVersion := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion)

+ '.' + IntToStr(dwBuildNumber and $0000FFFF);

SProduct := 'Microsoft Windows unknown';

case Info.dwPlatformId of

VER_PLATFORM_WIN32s: { Windows 3.1 and earliest }

SProduct := 'Microsoft Win32s';

VER_PLATFORM_WIN32_WINDOWS:

case dwMajorVersion of

4: { Windows95,98,ME }

case dwMinorVersion of

0:

if szCSDVersion[1] in ['B', 'C'] then

begin

SProduct := 'Microsoft Windows 95 OSR2';

SVersion := SVersion + szCSDVersion[1];

end

else

SProduct := 'Microsoft Windows 95';

10:

if szCSDVersion[1] = 'A' then

begin

SProduct := 'Microsoft Windows 98 SE';

SVersion := SVersion + szCSDVersion[1];

end

else

SProduct := 'Microsoft Windows 98';

90:

SProduct := 'Microsoft Windows Millennium Edition';

end;

end;

VER_PLATFORM_WIN32_NT:

begin

SServicePack := szCSDVersion;

case dwMajorVersion of

0..4:

if bEx then

begin

case wProductType of

VER_NT_WORKSTATION:

SProduct := 'Microsoft Windows NT Workstation 4.0';

VER_NT_SERVER:

if wSuiteMask and VER_SUITE_ENTERPRISE <> 0 then

SProduct := 'Microsoft Windows NT Advanced Server 4.0'

else

SProduct := 'Microsoft Windows NT Server 4.0';

end;

end

else { NT351 and NT4.0 SP5 earliest}

with TRegistry.Create do

try

RootKey := HKEY_LOCAL_MACHINE;

if OpenKey('SYSTEM\CurrentControlSet\Control\ProductOptions', False) then

begin

if ReadString('ProductType') = 'WINNT' then

SProduct := 'Microsoft Windows NT Workstation ' + SVersion

else if ReadString('ProductType') = 'LANMANNT' then

SProduct := 'Microsoft Windows NT Server ' + SVersion

else if ReadString('ProductType') = 'LANMANNT' then

SProduct := 'Microsoft Windows NT Advanced Server ' + SVersion;

end;

finally

Free;

end;

5:

case dwMinorVersion of

0: { Windows 2000 }

case wProductType of

VER_NT_WORKSTATION:

SProduct := 'Microsoft Windows 2000 Professional';

VER_NT_SERVER:

if wSuiteMask and VER_SUITE_DATACENTER <> 0 then

SProduct := 'Microsoft Windows 2000 Datacenter Server'

else if wSuiteMask and VER_SUITE_ENTERPRISE <> 0 then

SProduct := 'Microsoft Windows 2000 Advanced Server'

else

SProduct := 'Microsoft Windows 2000 Server';

end;

1: { Windows XP }

if wSuiteMask and VER_SUITE_PERSONAL <> 0 then

SProduct := 'Microsoft Windows Home Edition'

else

SProduct := 'Microsoft Windows Professional';

2: { Windows Server 2003 }

if wSuiteMask and VER_SUITE_DATACENTER <> 0 then

SProduct := 'Microsoft Windows Server 2003 Datacenter Edition'

else if wSuiteMask and VER_SUITE_ENTERPRISE <> 0 then

SProduct := 'Microsoft Windows Server 2003 Enterprise Edition'

else if wSuiteMask and VER_SUITE_BLADE <> 0 then

SProduct := 'Microsoft Windows Server 2003 Web Edition'

else

SProduct := 'Microsoft Windows Server 2003 Standard Edition';

end;

end;

end;

VER_PLATFORM_WIN32_CE: { Windows CE }

SProduct := SProduct + ' CE';

end;

end;

Result := True;

end;

测试

procedure TForm1.Button1Click(Sender: TObject);

var

a,b,c :String;

begin

GetVersionInfo(a,b,c);

ShowMessage(a + #10 + b + #10 + c);

end;

如果你得到的是'Microsoft Windows unknown',请给我来信,写明你用的系统

Email: gpg@mail.csdn.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有