使用 CPLApplet

在 Windows Vista 之前,你通过创建.dll文件并使用.cpl扩展名命名来创建控制面板项。 此文件导出了 CPlApplet 函数。 此方案在 Windows Vista 及更高版本中仍受支持,本主题对此进行了讨论。 但是,新控制面板项的指南建议使用更简单的方法,将控制面板项生成为使用任务流布局的.exe文件。

当控制面板加载.dll (或.cpl) 文件时,它会调用 CPlApplet 函数来获取信息,例如文件承载的控制面板项数,以及有关每个项的信息。 控制面板在初始化、打开或关闭项的窗口时也会调用 函数。

当 Windows 首次加载控制面板项时,它会检索 CPlApplet 函数的地址,然后使用该地址调用函数并向其传递消息。 它可能会发送以下消息。

消息 说明
CPL_DBLCLK 发送通知 CPlApplet 用户已选择与给定控制面板项关联的图标。 CPlApplet 应显示指定项的对话框,并执行任何用户指定的任务。 CPlAppletlParam1 参数是一个整数,表示控制面板项的从零开始的索引。 lParam2 参数是在CPL_INQUIRE或CPL_NEWINQUIRE消息的 CPLINFONEWCPLINFO 结构中返回lpData 指针。 返回值将被忽略。
CPL_EXIT 在最后CPL_STOP消息之后和紧接在 Windows 使用 FreeLibrary 函数释放包含控制面板项的 DLL 之前发送。 CPlApplet 应释放剩余内存并准备关闭。 返回值将被忽略。
CPL_GETCOUNT 在CPL_INIT消息后发送,提示 CPlApplet 返回一个数字,指示它支持多少个子程序。
CPL_INIT 在加载包含控制面板项的 DLL 之后立即发送。 该消息提示 CPlApplet 执行初始化过程,包括内存分配。
CPL_INQUIRE 在CPL_GETCOUNT消息之后发送,提示 CPlApplet 提供有关指定子程序的信息。 lParam1 值是一个整数,表示正在请求的信息的子程序从零开始的索引。 CPlAppletlParam2 参数指向 CPLINFO 结构。 返回值将被忽略。
CPL_NEWINQUIRE 在CPL_GETCOUNT消息之后发送,提示 CPlApplet 提供有关指定控制面板项的信息。 lParam1 值是一个整数,表示正在请求的信息的子程序从零开始的索引。 lParam2 参数是指向 NEWCPLINFO 结构的指针。 通常应忽略CPL_NEWINQUIRE。 应用程序应仅在 Windows 95、Microsoft Windows NT 4.0 及更高版本系统上处理CPL_INQUIRE,因为使用 CPL_NEWINQUIRE 时,控制面板性能会受到影响。 这是因为无法缓存返回的字符串和图标。 返回值将被忽略。
CPL_SELECT 已过时。 当前版本的 Windows 不会发送此消息。
CPL_STARTWPARMS 发送 通知 CPlApplet 用户已选择与给定对话框关联的图标。 CPlApplet 应显示相应的对话框并执行用户指定的任何任务。 此消息类似于CPL_DBLCLK,但可能存在一些其他信息。 lParam1 参数是控制面板项编号,lParam2 是可能必要的任何额外方向的 LPCTSTR。 如果处理此消息,则返回 TRUE ;否则为 FALSE。 此消息对 Shell32.dll 版本 5.00 及更高版本有效。
CPL_STOP 在 Windows 卸载控制面板扩展名之前,为 .cpl 文件中的每个控制面板项发送一次。 CPlApplet 应释放与 lParam1 中提供的项编号关联的任何内存。 lParam2 参数是在CPL_INQUIRE或CPL_NEWINQUIRE消息的 CPLINFONEWCPLINFO 结构中返回lpData 指针。 返回值将被忽略。

 

控制面板项

用户体验指南

注册控制面板项

控制面板消息处理

执行控制面板项

扩展系统控制面板项

分配控制面板类别

为控制面板项创建可搜索的任务链接

在 Windows Vista 下以安全模式访问控制面板