获得Windows的版本信息。[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 gpg 的 blog

  最近写控件,因为想加入版本信息,而通常大多数情况下,几乎所有的公司或个人都会在自己软件的版本信息里提及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
     &

本文关键:获得Windows的版本信息。
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top