当我们打开“控制面板”以后,能看到许多项目,如:系统、
显示器等。不过,这些项目并非指向某些可执行的程序,其实,它
们是一些特殊的动态链接库,在Windows里注册的类型是“控制面板
扩展”,文件的扩展名是“CPL”。
这种“控制面板扩展”与普通动态链接库(DLL)类似,但必须
符合以下的要求:
1.该动态链接库必须输出一个CplApplet函数,这个函数包含了
一些消息,函数的原型如下:
function CPlApplet(hwndCPL: HWND; uMsg: UINT;
lParam1: LPARAM; lParam2: LPARAM): LongInt; stdcall;
2.该动态链接库的扩展名是“CPL”,位于Windows的系统目录
下,通常是“\Windows\System”;
3.函数CplApplet必须处理的消息包括:CPL—INIT、CPL—
GETCOUNT、CPL—NEWINQUIRE、CPL—DBLCLK等:
CPL—INIT:表示程序被(控制面板)发现,返回True或False
表示是否继续进行下去。
CPL—GETCOUNT:确定程序在控制面板中显示的个数,返回值为
显示的个数。
CPL—NEWINQUIRE:用于填写程序的信息。
CPL—DBLCLK:当图标被双击时触发,这时可以显示一个Form。
在Delphi中新建一个工程,选择“DLL”,Delphi就会自动创建
一个动态链接库的框架,先把这个工程存为“myCPL.dpr”,然后新
建一个Form,保存为main.pas。
myCPL.dpr的内容如下:
library mycpl;
uses
Windows,
SysUtils,
CPL,
Forms,
main in ′main.pas′ {MainForm};
{$E cpl} //表示扩展名是CPL
{$R *.res}
function CPlApplet(hwndCPL: HWND; uMsg: UINT;
lParam1: LPARAM; lParam2: LPARAM) : LongInt; stdcall;
var
pNewInfo: PNewCPlInfo;
begin
case uMsg of
CPL—INIT:
begin
Result := 1;
end;
CPL—GETCOUNT:
begin
Result := 1;
end;
CPL—NEWINQUIRE:
begin
pNewInfo:=PNewCPlInfo(lParam2);
with pNewInfo^ do
begin
dwSize:=sizeof(TNewCPLInfo);
dwFlags:=0;
StrPLCopy(szName,′新建项目′, 31);
StrPLCopy(szInfo, ′我的选项′, 63);
end;
end;
CPL—DBLCLK:
begin
with TMainForm.Create(Application) do
ShowModal;
Result:=0;
end;
end;
end;
exports
CPlApplet;
begin
end.
把编译好的mycpl.cpl拷贝到Windows的System目录下后,打开
“控制面板”,你会发现多了一个“新建项目”,用鼠标选中,窗
口的状态栏显示:“我的选项”。用鼠标双击,一个Form就显示出
来,剩下的事情就不用多说了。
以上程序在Windows 95、Delphi 4.0下运行通过。
……