worm 发表于 2018-9-22 14:03:19

求能准确识别操作系统产品版本的DELPHI 代码~

新的XE有TOSVersion.ToString 这个函数可以直接显示出完整的操作系统版本号和SP号。还有是多少位的系统。但是有个缺陷就是不能显示是专业版,还是家庭版,还是旗舰版。。查找了一下百度好像没有发现相关的资料。没头绪了!.在Winapi.Windows.pas 文件里发现有
//
// Product types
// This list grows with each OS release.
//
// There is no ordering of values to ensure callers
// do an equality test i.e. greater-than and less-than
// comparisons are not useful.
//
// NOTE: Values in this list should never be deleted.
//       When a product-type 'X' gets dropped from a
//       OS release onwards, the value of 'X' continues
//       to be used in the mapping table of GetProductInfo.
//

PRODUCT_UNDEFINED                           = $00000000;
{$EXTERNALSYM PRODUCT_UNDEFINED}

PRODUCT_ULTIMATE                            = $00000001;
{$EXTERNALSYM PRODUCT_ULTIMATE}
PRODUCT_HOME_BASIC                        = $00000002;
{$EXTERNALSYM PRODUCT_HOME_BASIC}
PRODUCT_HOME_PREMIUM                        = $00000003;
{$EXTERNALSYM PRODUCT_HOME_PREMIUM}
PRODUCT_ENTERPRISE                        = $00000004;
{$EXTERNALSYM PRODUCT_ENTERPRISE}
PRODUCT_HOME_BASIC_N                        = $00000005;
{$EXTERNALSYM PRODUCT_HOME_BASIC_N}
PRODUCT_BUSINESS                            = $00000006;
{$EXTERNALSYM PRODUCT_BUSINESS}

但是菜鸟一枚,不知道 怎么调用。求高手指点 ~

worm 发表于 2018-9-22 15:44:01

我找到另外一个函数。GetProductInfo这个好像可以。自己写了一下。但是好像判断还是不准确。
procedure TForm1.Button20Click(Sender: TObject);
var
rpt: cardinal;
begin
if GetProductInfo(6, 1, 0, 0, &rpt) then
    ShowMessage(IntToStr(rpt));
end;

WIN7和2008R2 都是6.1版本号的。但是上面的返回码并不正确。
它的说明 : function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion: DWORD; out pdwReturnedProductType: DWORD): BOOL stdcall;external kernel32 delayed;
页: [1]
查看完整版本: 求能准确识别操作系统产品版本的DELPHI 代码~