控制面板消息处理

CPlApplet 回调函数处理 Windows 发送到控制面板项的所有消息。 发送到函数的消息按特定顺序发送。 同样,.cpl项要求以特定方式处理消息。

首先,当 Windows 首次加载控制面板项时,CPlApplet 函数会收到CPL_INIT消息。 函数应执行任何初始化,例如分配内存,并返回非零值。 如果 CPlApplet 无法完成初始化,则必须返回零,指示 Windows 终止通信并释放 DLL。

接下来,如果CPL_INIT消息成功,Windows 会发送CPL_GETCOUNT消息。 然后,该函数必须返回.dll文件支持的控制面板项数。

然后,CPlApplet 函数为.dll文件支持的每个控制面板项接收一条CPL_INQUIRE消息和一条CPL_NEWINQUIRE消息。 函数使用项目的名称、图标和描述性字符串等信息填充 CPLINFONEWCPLINFO 结构。 大多数应用程序应处理CPL_INQUIRE消息,并忽略CPL_NEWINQUIRE消息。 CPL_INQUIRE消息以 Windows 可以缓存的形式提供信息,从而获得更好的性能。 仅当需要根据计算机状态更改项的图标或显示字符串时,才使用CPL_NEWINQUIRE消息。 Windows Vista 中的“开始”菜单搜索无法找到使用 CPL_NEWINQUIRE 的控制面板项,因为它依赖于缓存。

接下来,CPlApplet 函数接收CPL_DBLCLK消息,作为用户已选择表示控制面板项的图标的通知。 函数可能会多次收到此消息。 该消息包括在调用 CPL_INQUIRE 或 CPL_NEWINQUIRE在 CPLINFONEWCPLINFO 结构中返回的项标识符和 lpData 指针。 函数应显示相应的对话框并处理后续用户输入。

除了CPL_DBLCLK,如果通过输入参数(例如从命令提示符或其他程序)调用控制面板项,还可以发送CPL_STARTWPARMS消息。 该消息包含项标识符以及其他参数字符串。

在控制应用程序终止之前,CPlApplet 会针对.dll 文件支持的每个控制面板项接收一次CPL_STOP消息。 该消息包括控制面板项的标识符,以及调用 CPL_INQUIRE 或 CPL_NEWINQUIRE在 CPLINFONEWCPLINFO 结构中返回lpData 指针。 函数应释放为指定对话框分配的任何内存。

在最后CPL_STOP消息后, CPlApplet 会收到CPL_EXIT消息。 函数应释放所有剩余的分配内存,并取消注册它可能已注册的任何专用窗口类。 函数从此消息返回后,Windows 立即通过调用 FreeLibrary 函数释放控制面板项。

控制面板项

用户体验指南

注册控制面板项

使用 CPLApplet

执行控制面板项

扩展系统控制面板项

分配控制面板类别

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

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