分享
 
 
 

利用WindowsAPI函数和注册表获取系统信息

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

在 开 发 应 用 程 序 时, 增 加 一 项 显 示 计 算 机 系 统 信 息 的 功 能, 例 如 已 安 装 的 软 盘、 硬 盘、 光 驱、 网 络 驱 动 器, 硬 盘 的 容 量 和 剩 余 空 间, 显 示 器 分 辨 率、 键 盘 类 型、 鼠 标 的 键 数, 内 存 大 小、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 i1 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有