使用 CPLApplet

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

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

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

消息 说明
CPL_DBLCLK 用于通知 CPlApplet 用户已选择与给定控制面板项目相关的图标。 CPlApplet 应显示指定项目的对话框并执行任何用户指定的任务。 CPlApplet lParam1 参数是一个整数,表示控制面板项目从零开始的索引。 lParam2 参数是 CPLINFONEWCPLINFO 结构中返回的 lpData 指针,该结构位于 CPL_INQUIRECPL_NEWINQUIRE 消息中。 返回值会被忽略。
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。 此消息适用于版本 5.00 及更高版本的 Shell32.dll。
CPL_STOP 在 Windows 卸载控制面板扩展名之前,为 .cpl 文件中的每个控制面板项目发送一次。 CPlApplet 应释放与 lParam1 中提供的项目编号相关联的任何内存。 lParam2 参数是 CPLINFONEWCPLINFO 结构中返回的 lpData 指针,该结构位于 CPL_INQUIRECPL_NEWINQUIRE 消息中。 返回值会被忽略。

 

控制面板项目

用户体验指南

注册控制面板项目

控制面板消息处理

执行控制面板项目

扩展系统控制面板项目

分配控制面板类别

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

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