Delphi 开发控制面板程序

一、关于控制面板程序

在Windows中提供了一个控制面板窗口,一个控制面板窗口就象Windows的控制中心。在窗口中有诸如 “系统”、“多媒体”图标,通过双击这些不同的图标,就可以打开不同的控制面板程序查看系统状况和对系统进行设置了。

  如何在控制面板中添加自己的控制面板程序呢?首先来了解以下控制面板程序的原理。一个控制面板程序就是一个动态连接库(DLL)。在库文件中必须建立一个名称为CPLApplet的输出回调函数,在函数中加入对Windows调用的响应代码,编辑成动态连接库文件。库文件将库文件的扩展名改为CPL,然后将文件拷贝到 Windows\System子目录下,系统在启动时会自动搜索扩展名为Cpl的文件。搜索到文件之后,系统会装入文件并调用CPLApplet函数,这时函数中的代码就开始工作,执行弹出系统设置窗口等操作。

CPLApplet函数原型:

function CPlApplet(

  hwndCPl: THandle;  //Indentifies the main window of the controlling application.

  uMsg: DWORD; //Specifies the message being sent to the Control Panel application
  lParam1, lParam2: Longint //Specify additional message-specific information

): Longint; stdcall;


CplApplet函数是控制面板与控制面板应用程序通讯的唯一方式。一个控制面板程序中的CplApplet函数的基本框架结构如下:

function CPlApplet(hwndCPl: THandle; uMsg: DWORD;
                   lParam1, lParam2: Longint): Longint; stdcall;
begin
  //...
      case (umsg) of
        CPL_INIT : begin    ...  end;
        CPL_GETCOUNT:begin    ...  end;
        CPL_STARTWPARMS :begin    ...  end;
        CPL_INQUIRE     : begin    ...  end;
        CPL_NEWINQUIRE  : begin    ...  end;
        CPL_DBLCLK      : begin    ...  end;
        CPL_STOP        : begin    ...  end;
        CPL_EXIT        : begin    ...  end;
        CPL_SETUP       : begin    ...  end;
      end;
  //函数的返回值取决于uMsg

end;

第一步:

Delphi的菜单中选File | New ,在New Items窗口中会看到有一个 Control Panel Application 选项,点击这个选项,然后再按OK键,就可以建立一个基本的控制面板程序。在这个程序的工程文件包中包含两个文件,一个是工程文件 Project1.dpr。按Ctrl+F12打开View Units窗口打开Project1,可以看到代码的第一行是library Project1; ,另外在代码中还有一行:exports CPlApplet; ,这说明程序已经自动建立了输出回调函数。

另一个文件是控制面板程序控制文件(姑且这么称呼它)Unit1.pas。这个程序代码中建立了一个TAppletModule类,这个类就是控制面板程序控制类。同时程序还会建立一个调试、控制窗口AppletModule1。在窗口左边的列表框中有一项 AppletModule1,右键点击该项,在弹出菜单中选Install Control Panel Applet项编译并安装控制面板程序。如果安装成功,再右键点击AppletModule1,在弹出菜单中选Launch Control Panel运行控制面板。在控制面板中是不是增加了一个 AppletModule1项?

Delphi向导创建的工程文件如下:
library ControlPanelDemo;


uses
  CtlPanel,
  AppletModule in 'AppletModule.pas' {ControlPanel: TAppletModule},
  ControlPanelMain in 'ControlPanelMain.pas' {FormMain};


exports CPlApplet;


{$R *.RES}

{$E cpl}

begin
  Application.Initialize;
  Application.CreateForm(TControlPanel, ControlPanel);
  Application.Run;
end.

在上面的DPR文件中,Application对象的类型是TAppletApplication,而不是TApplication,它是在CtlPanel单元中申明的。而且CplApplet函数也已经由CtrlPanel单元定义好了。

第二步:更改AppletModule的属性
一个AppletModule对象代表一个对话框(即applet),一个CPL应用程序可以包含多个对话框。你可以通过Delphi向导来添加多个AppletModule。
  AppletIcon属性:指定一个图标,此图标将出现在控制面板中
  Caption属性:显示图标下面的文字。
  Help属性:出现在控制面板窗口的状态栏上的文字。
  ResidIcon属性:图标资源id,此属性与AppletIcon属性互斥。
  ResidName属性:字符串资源id,此属性与Caption属性互斥。
  ResidInfo属性:字符串资源id,此属性与Help属性互斥。

第三步:编写事件句柄
在控制面板中,当鼠标双击对话框的图标时,相应的AppletModule对象会产生OnActivate事件。为了响应鼠标的双击,你需要为TAppletModule的OnActivate事件属性提供一个事件句柄。

uses ControlPanelMain;

//=== 鼠标响应事件 ===
procedure TControlPanel.AppletModuleActivate(Sender: TObject; Data: Integer);
begin
  with TFormMain.Create(Application) do
  begin
    if ShowModal = mrOk then
      Free;
  end;
end;

图标和程序标题设置好以后,再重复上面的Install Control Panel Applet编译并安装程序,然后再选Launch Control Panel运行。双击新建立的程序图标,看看,建立一个控制面板程序就是这么简单!

  当然,这只是一个最简单的控制面板程序,它只是响应OnActive事件并弹出一个窗口,在OnActive事件中的Data是一个比较重要的参数,它是控制面板程序调用程序传递给程序的参数,利用这个参数可以对不同的调用弹出不同的窗口,例如你要建立一个时间/日期调整控制程序,你可以做以下代码:
  procedure TAppletModule1.AppletModuleActivate(Sender: TObject;
    Data: Integer);
  begin
    with TForm2.Create(Application) do begin file://以下是伪代码:
      Case Data of
 
  1:DoChangeTime;  file://显示改变系统时间窗口
  2:DoChangeDate;  file://显示改变系统日期窗口
      end;
    end;
  end;

  这样当外部程序以不同的参数调用程序时,程序能弹出不同的窗口,例如 RunDll32 app.cpl 1就将弹出改变系统时间窗口。


第四步:调试cpl

    在Host application中添加“C:\WINDOWS\system32\rundll32.exe”

    在Paramters中添加“shell32.dll,Control_RunDLL D:\PQXSource\ControlPanel\Bin\ControlPanelDemo.cpl”其中“D:\PQXSource\ControlPanel\Bin\ControlPanelDemo.cpl”是cpl所在路径,需要全路径名,如图所示:

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值