当前位置:中国星空学习网首页>实用技术>注册表>正文  
利用Windows API函数和注册表获取系统信息

 
  在 开 发 应 用 程 序 时, 增 加 一 项 显 示 计 算 机 系 统 信 息 的 功 能, 例 如 已 安 装 的 软 盘、 硬 盘、 光 驱、 网 络 驱 动 器, 硬 盘 的 容 量 和 剩 余 空 间, 显 示 器 分 辨 率、 键 盘 类 型、 鼠 标 的 键 数, 内 存 大 小、CPU 类 型,Windows 的 版 本 号、 产 品 标 识、 注 册 用 户 单 位 名 和 用 户 名、 当 前 操 作 用 户 名 等( 见 运 行 图 示), 当 然 还 有 更 多 的 信 息, 这 样 会 使 你 的 程 序 更 友 好。 其 实, 有 很 多 应 用 程 序 就 是 这 样 做 的。
  
    通 过 调 用Windows 的API 函 数 和 访 问Windows 注 册 表, 可 以 获 取 大 量 的 系 统 信 息。Delphi 为 绝 大 多 数Windows API 函 数 提 供 了 调 用 接 口( 可 参 见DELPHI3\SOURCE\RTL\WIN\windows.pas 文 件), 并 提 供 了 一 个 功 能 全 面 的TRegistry 类, 使 我 们 可 以 方 便 的 调 用Windows API 函 数 和 访 问 注 册 表, 例 如:
  
    1、function GetDriveType(lpRootPathName: PChar): UINT; 返 回 指 定 驱 动 器 的 类 型。
  
    2、function GetDiskFreeSpace(lpRootPathName: PChar; var lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; 返 回 指 定 驱 动 器 的 总 簇 数、 剩 余 簇 数 及 每 簇 扇 区 数、 每 扇 区 字 节 数, 从 而 可 以 计 算 出 总 容 量 和 剩 余 空 间。
  
    3、function GetSystemMetrics(SM_CXSCREEN或 SM_CYSCREEN): Integer; 返 回 显 示 器 分 辨 率。
  
    4、function GetSystemMetrics(SM_CMOUSEBUTTONS): Integer; 返 回 鼠 标 的 按 键 数 目。
  
    5、 在windows 注 册 表 的HKEY_LOCAL_MACHINE\ software\microsoft\windows\currentversion \RegisteredOwner 主 键 下 存 放 着Windows 安 装 时 输 入 的 用 户 名, 可 用 以 下 语 句 读 取。
  
  myreg:=Tregistry.Create;
  file://必须在程序单元的uses部分加入Registry
  myreg.RootKey:=HKEY_LOCAL_MACHINE;
  if myreg.openkey('software\microsoft \windows\currentversion',false) then
   memo1.lines.add(' 注册用户名: '+myreg.readstring('RegisteredOwner'));
   myreg.closekey;
  
    以 上 仅 举 几 例, 获 取 其 他 一 些 信 息 的 方 法 与 此 类 似, 详 见 源 程 序。
  
    本 程 序 在Pwin95、Delphi3 下 调 试 通 过。
  
    附: 源 程 序 清 单。
  
  unit Unit1;
  interface
  uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry;
  
  type
  TForm1 = class(TForm)
  Button1: TButton;
  Memo1: TMemo;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  
  var
  Form1: TForm1;
  
  implementation
  {$R *.DFM}
  
  procedure TForm1.Button1Click(Sender: TObject);
  var
  i,x,y:integer;
  ch:char; file://驱动器字符'A'~'Z'
  buffer:string;
  cpuinfo:TSYSTEMINFO; file://存放系统信息的记录类型,在Windows.pas中查到详细内容。
  meminfo:TMemoryStatus; file://存放系统内存信息的记录类型。
  computername,username:pchar; file://计算机名称、用户名
  spc,bps,nofc,tnoc:longint; file://用于存放磁盘容量的变量
  myreg:Tregistry; file://用于访问注册表的TRegistry变量
  begin
  memo1.Lines.Clear;
  
  for ch:='A' to 'Z' do begin
  i:=getdrivetype(pchar(ch+':\'));
  buffer:=' '+ch+': ';
  case i of
  DRIVE_UNKNOWN : buffer:=buffer+'未知类型';
  DRIVE_REMOVABLE: buffer:=buffer+'软盘';
  DRIVE_FIXED : begin
  buffer:=buffer+'硬盘';
  if getdiskfreespace(pchar(ch+':\'),spc,bps,nofc,tnoc) then
  begin
  buffer:=buffer+'总容量: '+inttostr((spc*bps*tnoc) div (1024*1024))+'MB';
  buffer:=buffer+'剩余: '+inttostr((spc*bps*nofc) div (1024*1024))+'MB';
  end;
  end;
  DRIVE_REMOTE : buffer:=buffer+'网络驱动器';
  DRIVE_CDROM :buffer:=buffer+'CD-ROM驱动器';
  DRIVE_RAMDISK:buffer:=buffer+'RAM虚拟驱动器';
  end;
  if (ch >'D') and (i=1) then break;
  if i< >1 then memo1.Lines.Add(buffer);
  end;
  
  case getkeyboardtype(0) of file://获取键盘类型
  1: buffer:=' 键盘: IBM PC/XT或兼容类型(83键)';
  2: buffer:=' 键盘: Olivetti "ICO"(102键)';
  3: buffer:=' 键盘: IBM PC/AT(84键)';
  4: buffer:=' 键盘: IBM增强型(101或102键)';
  5: buffer:=' 键盘: Nokia 1050';
  6: buffer:=' 键盘: Nokia 9140';
  7: buffer:=' 键盘: Japanese';
  end;
  memo1.lines.add(buffer);
  
  file://获取键盘功能键数目
  memo1.lines.add(' 功能键数目: '+inttostr(getkeyboardtype(2)));
  
  memo1.Lines.add('显示器分辨率: '+inttostr(getsystemmetrics(SM_CXSCREEN)) +'x'+
  inttostr(getsystemmetrics(SM_CYSCREEN)));
  file://获取鼠标按键数目
  memo1.Lines.add(' 鼠标: '+inttostr(getsystemmetrics(SM_CMOUSEBUTTONS))+'键');
  
  globalmemorystatus(meminfo); file://获取系统内存数量
  memo1.lines.add(' 物理内存: '+inttostr(meminfo.dwTotalPhys div 1024)+' KB');
  
  i:=getsystemmetrics(SM_CLEANBOOT);
  case i of
  0:buffer:='系统启动模式:正常模式';
  1:buffer:='系统启动模式:保护模式';
  2:buffer:='系统启动模式:网络保护模式';
  end;
  memo1.lines.add(buffer);
  
  x:=getsystemmetrics(SM_ARRANGE);
  file://获取系统最小化窗口的起始位置和排列方式
  y:=x;
  x:=x and 3;
  y:=y and 12;
  case x of
  ARW_BOTTOMLEFT : buffer:=' 最小化窗口:自左下角';
  ARW_BOTTOMRIGHT : buffer:=' 最小化窗口:自右下角';
  ARW_TOPLEFT : buffer:=' 最小化窗口:自左上角';
  ARW_TOPRIGHT : buffer:=' 最小化窗口:自右上角';
  end;
  case y of
  ARW_LEFT : buffer:=buffer+'横向排列';
  ARW_UP : buffer:=buffer+'纵向排列';
  ARW_HIDE : buffer:=buffer+'隐藏';
  end;
  memo1.lines.add(buffer);
  
  getmem(computername,255); file://获取计算机名称和用户名
  getmem(username,255);
  i:=255;
  getcomputername(computername,i);
  memo1.lines.add(' 计算机名称: '+computername);
  getusername(username,i);
  memo1.lines.add(' 用户名: '+username);
  freemem(computername);
  freemem(username);
  
  getsysteminfo(cpuinfo); file://获取CPU类型
  case cpuinfo.dwProcessorType of
  386 : buffer:=' CPU类型: 386';
  486 : buffer:=' CPU类型: 486';
  586 : buffer:=' CPU类型: Pentium';
  end;
  memo1.Lines.add(buffer);
  
  file://从注册表中获取CPU标识,Windows版本,
  产品标识,注册单位名称及用户名
  myreg:=Tregistry.Create;
  myreg.RootKey:=HKEY_LOCAL_MACHINE;
  if myreg.OpenKey('hardware\descriptionsystem\centralprocessor\0',false) then
  memo1.lines.add(' CPU标识:
  '+myreg.ReadString('VendorIdentifier'));
  myreg.closekey;
  if myreg.openkey('software\microsoft\ windows\currentversion',false) then
  begin
  memo1.lines.add(' windows版本: '+myreg.ReadString('Version'));
  memo1.lines.add(' 版本号: '+myreg.ReadString('VersionNumber')+' '+myreg.ReadString('Subversionnumber'));
  memo1.lines.add(' 产品标识: '+myreg.Readstring('ProductID'));
  memo1.lines.add('注册单位名称: '+myreg.readstring('RegisteredOrganization'));
  memo1.lines.add(' 注册用户名: '+myreg.readstring('RegisteredOwner'));
  end;
  myreg.CloseKey;
  myreg.Free;
  end;
  end
  

 

上一篇: 绕过注册表对磁盘的封锁
下一篇: 另类方法导入注册表文件
站内公告
栏目导航
 Windows系统
 Linux/DOS
 办公应用
 工具软件
 图形图象
 网络应用
 安全防御
 网络编程
 软件教程
 实用技术
最新文章
中国星空图片网
·人体艺术
·性感美眉
·生活自拍
·幽默搞笑
·超级帅哥
·精彩万花筒
·梦幻景色
中国星空探索网
·神秘追踪 灵异接触
·鬼故事 灵异空间 图片
·未解之谜 探索宇宙
中国星空两性网
·两性图文 我的性事 情人 成人幽默
·性爱技巧 两性测试 性爱误区
·性事花边 生育避孕 性保健 性疾病
·两性生理 文化 讨论 心理 知识
·爱人同志 非常男女 一夜情
中国星空算网命
·手机吉凶 QQ号码吉凶 周公解梦
·塔罗牌测试 狗年运程
·关公灵签 紫薇斗数 八字排盘
·测试:你的成功指数有多少
·测验你的家庭是否美满?
·面相: 面型 眼睛 耳朵 口唇
·手相:拉你一把奶油桂花手
·测试:你能成为大富翁吗?
联系方式 设为首页
中国星空旗下---中国星空学习网    Copyright 2005-2050 Year   xx.happy369.com  Networks.All rights reserved
中国星空网所有内容均来源于网络,版权属于原作者,如侵犯到您的权益,请与我们联系,我们将尽快予以删除或处理。
中国星空不承担由于内容的合法性及健康性所引起的一切争议和法律责任。
陕ICP备05011765号 联系我们