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

从 Windows Vista 开始,控制面板类别视图在每个控制面板项图标下方提供任务链接,如下所示。

系统和维护类别页上的任务链接

当用户在窗口右上角的“ 搜索 ”框中输入文本时,搜索结果将包含这些任务链接,如下所示,用于搜索单词“display”。

控制面板搜索结果中的任务链接

本主题讨论以下内容:

建议为控制面板项提供任务链接,以帮助用户搜索功能。 还可以向任务链接添加关键字,以便用户即使在不知道任务的标题或术语的情况下也能找到它们。

最佳任务链接有三个用途:

  1. 提供控制面板项功能的快捷方式。
  2. 提供关键字,以便用户可以使用其自己的语言进行搜索。 用户可能希望键入“compaction”,因为他/她知道技术术语。 用户可能会键入“DB 太大”或“数据库文件大小”。 向任务添加合适的关键字意味着用户可以找到控制面板项。
  3. 提供有关控制面板项执行的操作的提示。 当用户看到控制面板项图标下的链接时,他们可以获取有关控制面板项用途的详细信息,而不是名称和图标单独提供的信息。

任务链接应以最终用户为中心,而不是以技术或功能为重点。 例如,“启用数据库压缩”措辞不当,因为它是大多数用户不熟悉的技术行话。 “缩小数据库文件”更好,因为它提到用户的实际最终目标,而不是到达目标的机制。 目标不是过于简单化,而是根据用户想要完成的任务来表述任务。

创建任务 XML 文件

任务链接在 XML 文件中定义。 本部分提供了一个示例.xml文件的详细信息,该文件为名为记事本的控制面板项定义三个任务链接。 它定义任务链接的标题、关键字和命令行。 它还演示了如何指定哪些任务链接显示在哪个类别下。 注册为显示在多个类别中的控制面板项可以选择显示不同的链接,具体取决于类别。 对所提供的各种元素和信息的解释在 XML 本身中作为注释提供。

<?xml version="1.0" ?>
<applications xmlns="http://schemas.microsoft.com/windows/cpltasks/v1" 
              xmlns:sh="http://schemas.microsoft.com/windows/tasks/v1">
    
    <!-- Notepad -->
    <application id="{0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}"> 
    <!-- This GUID must match the GUID you created for your Control Panel item,
         and registered in namespace -->
    
        <!-- Solitaire -->
        <sh:task id="{3B75A7AE-C4E4-4E5A-9420-7CECCDA75425}"> 
            <!-- This is a generated GUID, specific to this task link -->
            <sh:name>Play solitaire</sh:name>
            <sh:keywords>solitare;game;cards;ace;diamond;heart;club;single</sh:keywords>
            <sh:command>%ProgramFiles%\Microsoft Games\Solitaire\solitaire.exe</sh:command>
        </sh:task>

        <!-- Task Manager -->
        <sh:task id="{BF46D6AA-B5E6-4EE1-9E5B-ED017272B9F9}" needsElevation="true"> 
            <!-- This is a generated GUID, specific to this task link -->
            <!-- The needsElevation="true" attribute means that the task 
                 appears with a shield icon next to it. Adding this attribute 
                 does not cause the .exe to require elevation - it just adds an 
                 icon to tell users that the command already requires it -->
            <sh:name>See running processes</sh:name>
            <sh:keywords>taskmgr;taskman;running processes;threads;cpu;</sh:keywords>
            <sh:command>taskmgr.exe</sh:command>
        </sh:task>

        <!-- IE -->
        <sh:task id="{DE3A6DCC-C18A-4BBF-9227-11856D7B4422}">
            <sh:name>Open Internet Explorer</sh:name>
            <sh:keywords>IE;web;browser;net;Internet;ActiveX;plug-in;plugin</sh:keywords>
            <sh:command>iexplore.exe</sh:command>
        </sh:task>
        
        <!-- Category assignments -->

        <!-- Appearance and Personalization -->
        <category id="1"> 
        <!-- These idref attributes refer to the GUIDs of the tasks defined above. A maximum of five tasks are shown per category. -->
            <sh:task idref="{3B75A7AE-C4E4-4E5A-9420-7CECCDA75425}"/>   
            <sh:task idref="{BF46D6AA-B5E6-4EE1-9E5B-ED017272B9F9}"/>
            <sh:task idref="{DE3A6DCC-C18A-4BBF-9227-11856D7B4422}"/>
        </category>
        
        <!-- Programs -->
        <category id="8"> 
            <sh:task idref="{3B75A7AE-C4E4-4E5A-9420-7CECCDA75425}">
                <sh:name>Click here to play</sh:name>
                <!-- This overrides the defined text. When the Notepad Control 
                     Panel item appears in the Programs category, it uses the 
                     "Click here to play" text for this Solitaire link, instead 
                     of "Play solitaire". -->
            </sh:task>
            <sh:task idref="{BF46D6AA-B5E6-4EE1-9E5B-ED017272B9F9}"/>
            <sh:task idref="{DE3A6DCC-C18A-4BBF-9227-11856D7B4422}"/>
       </category>
   </application>
</applications>

注意

从 Windows 7 开始,控制面板项可以按其规范名称(而不是其可执行名称)进行标识:<可以使用 sh:controlpanel> 元素代替 <sh:command> <sh:controlpanel> 元素还提供一个属性,用于指定它应打开的项的页面。 下面显示了 sh:controlpanel> 元素的示例<

 

<sh:controlpanel name="Microsoft.Presentation" page="pageWallpaper"/>

任务链接的标题和关键字的文本可以存储在控制面板项模块的字符串表中。 在这种情况下,XML 文件中使用的格式将变为:

<sh:task id="{3B75A7AE-C4E4-4E5A-9420-7CECCDA75425}"> 
    <!-- This is a generated GUID, specific to this task link -->
    <sh:name>@myTextResources.dll,-100</sh:name>
    <sh:keywords>@myTextResources.dll,-101</sh:keywords>
    <sh:command>%ProgramFiles%\Microsoft Games\Solitaire\solitaire.exe</sh:command>
</sh:task>

在此示例中,任务名称的文本显示在 myTextResources.dll 中的字符串资源 ID 100 中,关键字的文本显示在字符串资源 ID 101 中。

关键字和搜索

控制面板搜索会根据任务链接的名称和关键字查找任务链接。 它将搜索中的每个单词与名称和关键字中的单词前缀相匹配。 例如,查询字符串“cpu”将匹配前面示例中的任务“查看正在运行的进程”,因为“cpu”位于关键字 (keyword) 列表中。 查询字符串“pro”也会找到该结果,因为标题单词“process”以该字符串开头。 请注意,查询仅匹配前缀。 查询字符串“rocess”与结果不匹配,因为该字符串虽然是标题单词“process”的一部分,但不会以该单词开头。

当搜索查询包含多个标记时,所有标记都必须匹配某些关键字 (keyword) 或部分任务标题的前缀才能获得结果。 查询“cpu level”不匹配,因为“level”不在关键字 (keyword) 集中。 查询“cpu run”会给出结果,因为“cpu”与关键字 (keyword) 匹配,而“run”是任务标题中单词“running”的前缀。

控制面板不会自动提供拼写更正或变体,例如复数或连字。 匹配项也不区分大小写。 为确保成功关键字 (keyword) 列表,建议自行提供变体,例如对于涉及屏幕保护程序的任务链接:“screensavers;screen-savers;screen savers;screen savers;”

无需添加单数“screensaver”,因为查找“screensavers”的查询也会由于前缀匹配而找到“screensaver”。 用户键入单词的一部分(如“screensa”)仍将在任务链接上看到匹配项,该链接具有“screensavers”作为关键字 (keyword) 。 对于复数形式更改单词的语言,有必要将用户可合理键入的所有表单放入关键字中。

作为惯例,Microsoft 在关键字集中省略了“如何操作”或“我想要”等小字。 预期大多数用户只需键入最重要的单词(如“鼠标”、“高对比度”或“视频驱动程序”)即可获得结果。

控制面板项

用户体验指南

注册控制面板项

使用 CPLApplet

控制面板消息处理

执行控制面板项

扩展系统控制面板项

分配控制面板类别

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