Control Panel Applet 实现

来源:互联网 发布:sql count 后其他字段 编辑:程序博客网 时间:2024/05/21 19:44

这篇文章主要说明下如何生成一个控制面板程序(Control PanelApplet),一般它的后缀是.cpl,但这个没有什么硬性规定,你也可以是.exe、.dll等。

下面我是实现的CPL的效果图:

如果实现了一个CPL,那么我们的程序就可以被ContrlPanel加载进来。这里我讨论DLL的实现,EXE的实现应该差不多。
 

  用DLL实现的话,最核心的就是要导出一个函数,CPLApplet函数,它的原型如下:

   LONG CPlApplet(     
       HWNDhwndCPl,
       UINTuMsg,
       LPARAMlParam1,
       LPARAMlParam2
      );


   这个函数里面,我们一般需要处理的消息报有如下几种:

   CPL_INIT:
   当用户打开控制面板时,就会发送这个消息。当其他调用这个cpl Application的程序加载这个dll的时候会发给CplApplet函数这个消息。做一些初始化工作,如果成功返回0,否则返回非零。

   CPL_GETCOUNT:
   这个消息是得到这个dll中控制面板程序的数量。返回具体的数量,通常为1。

   CPL_NEWINQUIRE:
   基本上很多事情都在这个消息里进行,这里主要是处理一些有关控制面板程序的一些信息。如加载他的图标,名称等等。
    LPNEWCPLINFO这个结构体就是存放一些控制面板的信息。(当然这里用到对应的资源都是定义在资源文件里,也可以不用放到资源中,但一般都是放到程序资源文件中,统一管理)。

   CPL_DBLCLK:
   这个消息是当用户选择一个控制面板选项的时候会触发,在这个消息里我们可以做打开一个新的程序或者读注册表之类事情。

   CPL_STOP:
这个消息是关闭控制面板程序。

   CPL_EXIT:
   这个消息是在释放dll之前,发送给dll 中CplApplet 的消息。


一些关键点:

   1)包含头文件cpl.h。
   2)定义资源,字符串,图标等。
   3)如何让控制面板能加载CPL。
   当DLL输出名改为.cpl。
   一种方法是把.cpl放到system32目录下面,控制面板一起来就会去加载system32目录下面的.cpl。
   另一种方法就是把这个.cpl写到注册表中,路径如下:
   Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls如果你想让所有的用户都能用,就注册表HKEY_LOCAL_MACHINE下面,如果只是想当前用户可用,就注册表HKEY_CURRENT_USER。
4)添加一个.def文件,导出CPLApplet函数:
   LIBRARY "YouCPLName"
    EXPORTSCPlApplet PRIVATE

总结:

   我这里只是简单地说明了一下实现一个CPL的基本方法,最基本的是还是处理消息,这种模式我觉得挺好,像是服务器与客户端的这种通信模式一样,当然一个CPL还有复杂的界面与功能,如打开就直接嵌到控制面板中,分类等,这些都发球CPL的扩展方法,其实最根本的都在写注册表。

   大家可以参考MSDN上面详细的说明:
   ms-help://MS.MSDNQTR.v90.chs/shellcc/platform/shell/programmersguide/controlpanel/control_panel_items.htm


原创粉丝点击