网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用Delphi模拟组件的两阶段提交.
.PL0编译器TurboPascal版再现.
.Delphi中实现汉字拼音声母查询.
.在stringgrid控件中使文字内容在.
.保存页面为MHT的代码.
.netmessagebuffersend示例.
.锁定数据记录.
.图像输出组件的制作.
.安装程序打包interbase的方法.
.动态生成合计.
.给Delphi/C++Builder程序员:编写.
.如何将C/C++程序转译成Delphi(十.
.扫雷外挂的设计与实现(四).
.Delphi中实现界面与业务逻辑的分.
.Delphi图象截取编程示例(2).
.delphi7从入门到精通之四.
.Delphi与Excel的亲密接触.
.关于对象持久类框架的构架设计(P.
.设置ListView的页眉图标.
.自动编号的存储过程.

获得Windows的版本信息

发表日期:2006-2-4


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


上一篇:Delphi中对象解除技巧 人气:4167
下一篇:“序列号输入助手”源代码 人气:4300
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐