封面
《利用D elphi编写Windows控制面板组件及实例》
Word格式可编辑含目录
精心整理放心阅读欢迎下载
文档信息
利用Delphi编写Windows控制面板组件及实例
目录
一、控制面板组件基础知识
二、控制面板组件工作流程
1、每个CPL文件必须输出一个CplApplet函数
2、当把各CPL 或DLL调入内存时
3、 CPL_INIT消息处理结束后
4、 CPL_GETCOUNT消息处理结束后
说明
5、控制面板显示所有查找到的组件图标
说明
6、控制面板关闭时
三、控制面板组件编写实例
1、编程步骤
0 KEY_ALL_ACCESS KeyHandle)
0: :=0;
1: :=1 ;
2: :=2;
3: :=3;
0: :=0;
1: :=1 ;
2: :=2;
3: :=3;
正文
张建军中国人民解放军合肥炮兵学院研究生系 级
韩莹 中保财险安徽省铜陵市分公司计财部
关键词 在Windows95/NT/98操作系统中控制面板ControlPane l提供了定制Windows的操作方法通过它可以完成设置打印机、显示、 网络、添加新硬件等功能。通常控制面板包含 多个组件*.CPL 分别负责系统某一方面的设置。 鼠标双击任一组件图标控制面板调用相应程序弹出对话框允许设置系统参数。确认修改后系统参数保存在Windows注册表或某一配置文件*. INI中。
一、控制面板组件基础知识
控制面板是一个Wi n dows应用程序C:\WI NDOWS\其配置文件是
C:\W IND OWS\。控制面板组件是一些动态链接库其扩展名不是DLL而是CPL。通常控制面板组件保存在C:\WI NDOWS\SYS TEM\目录下。
在中有一个[MMCPL]节该节可指定由调用的动态链接库其格式一般为
[MMCPL]uniqueName=D:\ 这里假设PROJECT1为用户编写的控制面板组板文件
名其访问路径可由读者自行确定
采用此方法不必存放在C:\W I ND OWS\SY ST EM\目录下扩展名不必改为CPL。运行后按以下顺序调用这些动态链接库
在C:\WINDOWS\SYSTEM\目录下调用。 已加载并输出Cp lApple t()函数的可安装驱动程序。 在[MMCPL]节中指定的DLL。 在
C:\W INDOWS\SYSTEM\目录下调用CPL。 因此编写控制面板组件近似于编写普通DLL。通常一个CPL支持控制面板中的一个组件即一个图标 也可支持多个组件。本文介绍利用Delphi编写CPL、扩充控制面板组件一个CPL支持一个或多个组件的方法。
二、控制面板组件工作流程
1、每个CPL文件必须输出一个CplApplet函数与之间传递、处理消息。 Cp lApplet函数的原形是type
TCPLApp let = funct i on (hwndCPl: THandle; uMsg: DWORD;lParam1 lParam2: Longint) : Longint; stdcall ;
其中 hwndCPl是控制面板窗口句柄 uMsg是消息标识l Par am 1、 l Par am2是两个附加参数具体意义视uM s g的值而定。
2、当把各CPL 或DLL调入内存时立刻向CPLApp let发送一条CPL_INIT消息要求CPL执行全局初始化并分配内存。 CPL_INIT是唯一可以返回调用失败的消息。如果初始化成功 CPL返回非零否则返回零。如果CPL返回零控制面板终止与CPL通信并卸载此CPL 或DLL
3、 CPL_INIT消息处理结束后立刻向CPLAppl et发送一条C PL_GET COUNT消息 CPL返回支持的组件数。
4、 CPL_GETCOUNT消息处理结束后立刻向CPLApp l et发送一条C PL_NEW INQU I RE消息 CPL_NEWINQU I RE每次发送一条 以取得每个组件的图标、名称、提示内容显示在控制面板的状态栏等信息。l Par am1是指定对话框的数值该值应在0到(CPL_GETCOUNT - 1)之间。如果CPL_NEWINQU I RE处理成功返回0。
说明
◆在系统中发送的是CPL_INQUI RE消息。为向下兼容该消息被保留。基于W in32的CPL应使用CPL_NEW INQUI RE。
◆通过判断l Param1的值可对一个CPL支持的多个组件的图标、名称、提示内容等进行控制。
5、控制面板显示所有查找到的组件图标。 鼠标双击任一组件图标控制面板向其CPL发送一条CPL_DBLCLK消息 CPL显示相应对话框供用户改变系统设置。
说明
◆通过检测l Param1的值可判断用户双击的是一个CPL支持的多个组件中的哪个图标并运行相应程序。
6、控制面板关闭时 向每个组件发送一条CPL_STOP消息然后对每个CPL发送一条CPL_EXIT消息 CPL释放内存并卸载。
三、控制面板组件编写实例
1、编程步骤
在Delphi IDE中选取菜单File-New-DLL-OK。
②在Proj ect1中添加如图所示Form1、 Form2„„根据需要设计窗体界面。为简略起见本文仅以Form1为例。
③Form1主要代码 为编写基于Win32的CPL本文以读写Windows注册表为例
在uses子句添加:Registry。引用注册表单元在type部分声明变量 var
Form 1: TForm1 ;
KeyHand l e : HKEY;
ValSize : longint;
Option1 : Integer;
Option2 : Integer;
代码打开Windows注册表读取某特定键值procedure (Sender:TObject)begin
R egOpenKeyEx(HKEY_CURRENT_CONFI G
'Software\Microsoft\windows\CurrentVeion\
0 KEY_ALL_ACCESS KeyHand l e)
ValSize := SizeOf(Option1)
RegQueryValueEx(KeyHandle 'WinA' nil nil @Option1@ValSize)
ValSize := SizeOf(Option2)
RegQueryValueEx(KeyHandle 'WinB' nil nil @Option2@ValSize)with Form1 do begincase Option1 of
0: :=0;
1 : :=1 ;
2: :=2;
3: :=3;end;case Option2 of
0: :=0;
1 : :=1 ;
今天9月10日是教师节,我们今天有没有让孩子带礼物和花送给老师?我们这边不允许带礼物进学校,直接有校长在门口遇到有带礼物的直接拦截下来。今天有看到Friendhosting最近推出了教师节优惠,VPS全场45折,全球多机房可选,有需要的可以看看。Friendhosting是一家成立于2009年的保加利亚主机商,主要提供销售VPS和独立服务器出租业务,数据中心分布在:荷兰、保加利亚、立陶宛、捷克、乌...
今天下午遇到一个网友聊到他昨天新注册的一个域名,今天在去使用的时候发现域名居然不见。开始怀疑他昨天是否付款扣费,以及是否有实名认证过,毕竟我们在国内域名注册平台注册域名是需要实名认证的,大概3-5天内如果不验证那是不可以使用的。但是如果注册完毕的域名找不到那也是奇怪。同时我也有怀疑他是不是忘记记错账户。毕竟我们有很多朋友在某个商家注册很多账户,有时候自己都忘记是用哪个账户的。但是我们去找账户也不办...
iWebFusion(iWFHosting)在部落分享过很多次了,这是成立于2001年的老牌国外主机商H4Y旗下站点,提供的产品包括虚拟主机、VPS和独立服务器租用等等,其中VPS主机基于KVM架构,数据中心可选美国洛杉矶、北卡、本德、蒙蒂塞洛等。商家独立服务器可选5个不同机房,最低每月57美元起,而大流量10Gbps带宽服务器也仅149美元起。首先我们分享几款常规服务器配置信息,以下机器可选择5...