2Pascal-新时代的Pascal

标题: 求能准确识别操作系统产品版本的DELPHI 代码~ [打印本页]

作者: worm    时间: 2018-9-22 14:03
标题: 求能准确识别操作系统产品版本的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
我找到另外一个函数。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;




欢迎光临 2Pascal-新时代的Pascal (http://2pascal.com/) Powered by Discuz! X3