控制面板消息处理

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

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

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

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

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

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

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

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

控制面板项

用户体验指南

注册控制面板项

使用 CPLApplet

执行控制面板项

扩展系统控制面板项

分配控制面板类别

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

在 Windows Vista 下的“保险箱模式下访问控制面板