• 开始学习编写用于 Windows SideShow 设备的小工具【转】


    本文讨论:

    • SideShow 及其关联 API
    • 开发、安装和配置小工具
    • 设备缓存管理
    • 小工具事件和通知

    本文使用了以下技术:
    Windows Vista

    下载本文中所用的代码: SideShow2007_01.exe (169 KB)
    浏览在线代码

    目录

    什么是 SideShow 设备?
    使用和配置
    SideShow 小工具和设备体系结构
    小工具安装
    设备缓存管理
    小工具生存期
    内容
    功能、事件和通知
    总结

    当今的应用程序具有大量的信息需要与最终用户分享。然而,屏幕资源非常有限,对于软件开发人员以及最终用户而言,要组织好所有可能的信息,那简直是太费力了。再者,对于用户而言,在不同时间,区分信息优先级的方式也不尽相同。例如,当会议就要开始时,我需要立刻知道时间和地点。当我驾车时,我需要了解下一次在哪里拐弯。一般而言,我可能始终需要能够检查新收到的电子邮件。同样,您可以想像这样一些场景,例如我可能需要有关路况、航班、天气、财务交易等的信息。对于用户而言,在适当的时间获得恰当的信息确实是一个难题。

    Microsoft 小工具的宗旨就是致力于缓解这一问题。小工具的本质就是应用程序(或应用程序的一部分),它可以随时随地向用户提供所需的数据。目前,Microsoft 提供三种不同类型的小工具:用于 Windows® 边栏的小工具,可以在用户的桌面上或 Windows Vista™ 边栏中显示用户的信息;用于 Windows Live™ 的小工具,可以在任何计算机上通过 Web 浏览器显示用户的信息;以及用于 Windows SideShow™ 的小工具,可以通过其支持 SideShow 的设备驱动程序在辅助硬件设备上显示用户的信息。在本文中,我将专门探讨 SideShow 硬件设备,并介绍如何编写 SideShow 小工具,以使用托管 API 与这些设备通信。

    什么是 SideShow 设备?

    Windows Vista 支持与一台或多台辅助显示设备进行通信的功能。这些辅助显示设备的形状和大小不受限制,同时可具有各种各样的功能。许多这类设备尚未进入生产阶段,但不久也会上市。

    一些设备在打开计算机后才开机,而其他一些设备可以单独开机(无论计算机是否已打开)。一些设备甚至具有自己单独的可充电电池。一些设备是彩色的,而一些设备是灰色或单色的。一些设备可以显示位图,而一些设备只能显示文本。一些设备将提供不同大小的机载内存以缓存数据,而其他一些设备根本没有机载内存。一些设备提供了按钮,用以导航缓存的数据。一些设备可能提供了触摸屏。

    一些设备可能提供了内置的无线技术(如 Bluetooth),这样,无需在物理上将设备连接到计算机,计算机就能与设备通信。一些设备提供了耳机插孔,使您能够听取下载到其内存中的音乐或视频。

    图 1 显示了一台在其盖板上安装了 SideShow 设备的笔记本计算机样机,并提供了 SideShow 设备自身的特写图片。这种特定的 SideShow 设备具有 220×176 分辨率的显示屏,每个像素提供 16 位的颜色深度。此设备还提供了菜单按键、左、右、上、下按键以及 Enter 按键。这台 SideShow 设备是自供电设备,这意味着它使用计算机的电池来供电;然而,用户与设备交互时,并非必须打开计算机。开机时,此特定设备只消耗约 4 毫瓦的电能,而与此相对比,打开此设备时整个计算机的能耗约为 75 瓦。

    图 1 已安装 SideShow 设备的笔记本计算机样机 (单击该图像获得较大视图)

    图 1b(单击该图像获得较大视图)

    因此,在合上计算机机盖并关闭计算机电源的情况下,用户仍然可以阅读电子邮件、检查日历、查看一些数码照片、获取地图方向以及查看当前日期/时间等等。当然,您也可以修改您自己的应用程序,以便将其数据导入 SideShow 设备中。本文后面将介绍如何进行此操作。图 2 显示了一台用于控制 Windows Media® Center 的遥控设备样机。通过辅助显示屏,用户可以选择歌曲并通过 Media Center 进行播放。这种设备之所以非常酷,原因在于用户无需打开电视或监视器,就能够欣赏歌曲。此外,在看电影时,可以从 Media Center PC 向 Windows SideShow 设备发送程序信息,这样,您既可以读取这些信息,又不影响在监视器上播放电影。再者,您还可以使用此遥控器查看电视收视指南数据和节目安排记录。

    图 2(单击该图像获得较大视图)

    SideShow 设备的其他示例包括带有 LCD 显示屏的键盘、数码相框甚至移动电话。单台计算机可以同时连接多台 SideShow 设备。例如,图 1 中显示的笔记本计算机样机既可连接键盘,也可以与遥控器交流。每种显示屏可以显示类似或不同类型的信息。

    使用和配置

    最终用户使用 Windows SideShow 控制面板小程序来配置其 SideShow 设备。当用户打开此小程序时,将显示一个类似于图 3 中所示的问候窗口。

    图 3 SideShow 小程序可以控制设备和小工具 (单击该图像获得较大视图)

    最左侧的面板显示当前安装的 SideShow 硬件设备,这些设备按安装日期和时间排序。主面板中是网格。第一列显示已安装的知道如何与 SideShow 设备通信的应用程序,即 SideShow 小工具。默认情况下,Windows Vista 附带两个小工具:收件箱 — Windows Mail 和 Windows Media Player。图 3 还显示了我已安装的另一个小工具(Office Outlook® 2007 日历,随 Microsoft® Office Outlook 2007 提供)和我编写的一个小工具(称为 Jeff 的 SideShow 小工具)。每个其他网格列都表示一台连接到计算机的 SideShow 设备。图 3 显示了两台 SideShow 设备:Windows SideShow 模拟器—0 和 Logitech G-15 键盘。

    通过选中网格中的复选框,用户可以指明小工具可以与哪些 SideShow 设备通信。用户还可以通过在网格顶部选择特定的 SideShow 设备来配置该设备。例如,如果我选择“Windows SideShow 模拟器—0”项,则我将获得图 4 中所示的窗口。在此,您可以配置屏幕外观和行为(主题、语言、字体大小、亮度、背景光等),配置安全性和隐私设置(使用 PIN 以解除设备锁定,当用户注销计算机时删除所有数据),配置小工具(打开和关闭小工具,更改出现顺序),以及卸载设备。

    图 4 配置 SideShow 设备 (单击该图像获得较大视图)

    许多 SideShow 设备将具有自己的机载内存,用于缓存小工具数据。要向 SideShow 设备发送数据,小工具必须处于运行状态,这意味着必须打开计算机。因此,Windows Vista 允许用户配置计算机唤醒自身并运行小工具的时间和频率。用户可以通过选择“将我的计算机设置为自动唤醒”选项来配置此功能,如图 3 中所示。选择此选项后,将显示图 5 中所示的窗口。唤醒后,计算机将一直保持唤醒状态,直到计算机空闲持续时间达到使用计算机的电源选项控制面板小程序指定的时间。请注意,一些计算机不支持自动唤醒功能,而一些应用程序可能阻止计算机回到睡眠模式。

    图 5 配置小工具如何唤醒设备 (单击该图像获得较大视图)

    SideShow 小工具和设备体系结构

    图 6 显示了 SideShow 小工具应用程序如何与 SideShow 硬件设备通信的体系结构图。每台硬件设备都必须附带用户模式设备驱动程序,此驱动程序必须安装到 Windows Vista 中。当 Windows 与设备通信时,操作系统将创建一个 WUDFHost.exe 进程,并将设备驱动程序加载到其中;对于每个设备驱动程序,都有 WUDFHost.exe 的一个实例。用户模式设备驱动程序具有很多优势,包括更易于开发、更易于诊断、系统稳定性更高且安全性得到改善。有关 Windows 用户模式设备驱动程序框架的更多信息,请参阅“用户模式驱动程序框架 (UMDF)

    图 6 SideShow 小工具通信体系结构 (单击该图像获得较大视图)

    可以采用本机代码或托管代码编写 SideShow 小工具应用程序。本机应用程序将控制用户已使用在 AuxiliaryDisplayApi.dll 中实现的 COM 组件和方法连接到此应用程序的设备(SideShow 的原始名称为 Auxiliary Display,即:辅助显示)。此 DLL 随 Windows Vista 提供,确保可用于每台 Windows Vista 计算机上;然而,它在 Windows Vista 的 Starter 版本和 Home Basic 版本上不起作用。COM 组件的主要目标是从开发人员处提取出这一事实,即已连接或未连接不同的设备,并且所连接的设备支持不同的功能(屏幕大小、颜色等)。

    托管 SideShow 小工具将使用在 Microsoft.SideShow 命名空间中定义的类型来控制与之连接的设备。在 Microsoft.SideShow.dll 程序集文件中已实现了这些类型。(我已经为 Windows Vista 团队设计并实现了此程序集文件,可以通过 Microsoft 下载中心下载此文件。)在内部,这些类型直接与 AuxiliaryDisplayApi.dll 中的 COM 组件对话。然而,由于与此版本相关的某些计时问题,因此不能确保此程序集存在于安装的所有 Windows Vista 操作系统上。如果您使用此程序集编写托管 SideShow 小工具,必须确保将此 DLL 安装在最终用户的计算机上。

    为了帮助开发人员测试其小工具代码,Windows Vista SDK 随附了一个 SideShow 模拟器应用程序。此应用程序在 Windows Vista 上运行,它模拟一个 SideShow 硬件设备。为使模拟器正常工作,首先必须从命令提示符运行以下命令:

    复制代码

    WindowsSideShowVirtualDevice.exe /regserver

    这就注册了由模拟器使用的 COM 组件。在一台计算机上,只需注册 COM 组件一次。然后,当您要测试小工具时,就可以运行 VirtualSideShow.exe 应用程序(也随 SDK 提供)。

    Microsoft.SideShow.dll 程序集在 Microsoft.SideShow 和 Microsoft.SideShow.SimpleContentFormat 命名空间中定义了许多类型,这样,它就能够轻松地生成 SideShow 小工具或将 SideShow 功能集成到已经存在的应用程序中。图 7 中介绍了最重要和最常用的类。

    Figure 7 与 SideShow 相关的重要类


    描述

    GadgetRegistration
    一个可协助在注册表中安装小工具的静态类。

    SideShowGadget
    一个抽象基类,表示应用程序代码与用户已连接的一台或多台 SideShow 硬件设备之间的连接。此类从组件中派生,可以将它放到 Windows 窗体上。

    ScfSideShowGadget
    从 SideShowGadget 中派生,此类使应用程序能够向 SideShow 设备发送简单内容格式 (SCF) XML 字符串和图像。

    Scf
    一个提供静态方法的静态类,使得在源代码中创建 SCF XML 字符串的过程更简便。

    DeviceCapabilities
    此类的一个对象,表示硬件设备的功能。小工具应用程序可以使用此对象来精细调整它选择发送给设备的数据。

    小工具安装

    在开发 SideShow 小工具时,首先必须为它创建一个 GUID;这将成为小工具的 ID,并且 Windows Vista 使用此 ID 来与小工具交互。安装小工具时,安装程序应根据您已经为此小工具创建的 GUID 创建一个新的注册表子项:

    复制代码

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\SideShow\Gadgets\{<GUID>}

    如果您想为计算机上的所有用户安装该小工具,请使用 HKEY_LOCAL_MACHINE 而非 HKEY_CURRENT_USER。然后,在此注册表子项下,您需要添加一些注册表值,如图 8 所述。

    Figure 8 小工具安装的注册表值

    注册表值
    描述

    Icon
    文件的路径(以及可选的 Win32® 图标资源 ID 号),指的是应出现在控制面板和设备自身上的图标。如果未指定,将显示默认图标。建议您提供使用 32 位颜色的 16x16、32x32 和 48x48 像素的图像(使用 Alpha通道)。

    FriendlyName
    一个字符串或路径名和 Win32 字符串资源 ID(用于本地化字符串),应作为小工具的名称显示在控制面板中。如果您未提供此值,则不向用户显示字符串。

    StartCommand
    包含小工具代码的可执行文件的路径。当用户登录时,或在快速用户切换过程中,或当计算机从睡眠状态恢复时,或当用户对于某设备启用小工具时,Windows Vista 将使用此值来自动调用此应用程序。(这里没有什么智能可言;Windows Vista 非常频繁地调用小工具应用程序,因此小工具应用程序应保持较小规模。再者,如果小工具应用程序的另一个实例已在运行,或者无任何设备连接到小工具应用程序,则小工具应用程序应自行终止。)

    Endpoints
    所支持的端点的列表,可以采用 iCal 格式或 SCF. iCal(请参见 www.ietf.org/rfc/rfc2445.txt),后者是一种用于发布日历信息的文本表示形式。Office Outlook 2007 日历小工具使用此端点向 SideShow 设备发送 iCal 数据,以使设备能够呈现用户的日历数据。能够支持 iCal 端点的小工具和设备极少。相比较而言,SCF 是一系列相互引用的 XML 内容页。由于大多数应用程序将使用 SCF 格式,因此本文重点讨论此格式。

    CacheAlgorithm
    此值就小工具如何管理其内容给出提示信息(设备配备的缓存内存非常有限,而且许多小工具可能连接到单台设备)。小工具可以告知设备保留最新项(0,默认值)、保留最旧项 (1)、保留频繁访问的项 (2) 或保留最近访问的项 (4)。

    OnlineOnly
    如果值为 1,则仅当 Windows 正在运行并且小工具应用程序也正在运行时,用户才能在设备上使用小工具。

    PropertyPage
    小工具可以向其用户提供配置设置对话框,用户可以通过 Windows 控制面板启动此对话框。为此,小工具必须定义用于实现 IPropertyPage 接口的 COM 组件。然后,在安装过程中,小工具会添加这一指示 COM 组件的 GUID 的注册表值。如果已指定,控制面板将用下划线标出小工具应用程序,这样,用户就能够单击它来调用小工具的配置对话框。

    小工具的安装程序应创建其自己的注册表子项,并设置它所需的任何注册表值。通常,安装程序会将这些注册表附加项放入一个 .reg 文件中,并在进行应用程序安装时调用此文件。当安装程序将近结束时,应执行以下命令,此命令使 Windows Vista 显示一个工具提示,以提醒用户已经安装了小工具应用程序:

    复制代码

    SchTasks.exe /run /tn Microsoft\Windows\SideShow\GadgetManager

    如果未安装设备,或者 GadgetManager 任务检测到自其上次运行以来未安装任何新的小工具,或者用户通过取消选择“安装新的小工具时通知我”复选框关闭了该任务(请参见图 3),则 GadgetManager 任务将不显示工具提示。

    一旦安装了小工具,用户就可以打开控制面板以配置此小工具,并将其连接到用户所需的任何硬件设备。然而,出于安全考虑,默认情况下不允许新安装的小工具与任何设备通信。

    当小工具正在运行时,它通常会定期向它所连接的设备发送数据。这样,当用户关闭计算机时,设备中已经缓存了一些数据,因此,一旦需要,用户就能访问这些信息,而无需打开计算机。当小工具正在运行时,它会收到来自 Windows 的通知,以指明用户何时通过控制面板从小工具中添加或移除了设备。

    还可以将小工具标记为“仅联机”,这就意味着,仅当计算机和 Windows 上的小工具同时运行时,用户才能在设备上与小工具交互。当用户在设备上进入此小工具时,如果计算机处于睡眠或休眠状态,则设备将询问用户是否应打开计算机。如果用户回答“是”,则将打开计算机。如果计算机处于运行状态并且用户已登录,则设备进入小工具。如果计算机已完全关闭,设备会告诉用户手动打开计算机并登录,这样就可以在设备上进入小工具。

    设备缓存管理

    由于设备所配备的缓存内存量有限,并且用户可能将多个小工具连接到单台设备,因此设备需要有效地管理内存。不同设备以不同方式来管理内存,但我将介绍使用 Microsoft 固件的设备如何管理内存。

    目前的 Microsoft 固件将设备上的内存平均分配给与设备连接的所有小工具。因此,如果三个小工具连接到设备,则每个小工具都确保获得三分之一的内存。如果一些小工具所用的内存小于自己所占的部分,则其他小工具可以使用超出自己所占部分的内存。如果某个低于其最小内存的小工具需要更多内存,则可以从超过其最小内存的任何小工具获得该内存。

    同样,如果某个超过其最小内存的小工具需要更多内存,则可以从超过其最小内存的优先级最低的小工具取用该内存。在图 3 中,您可以看到一个选项,该选项允许用户更改小工具出现的顺序。用户放在顶部的小工具的优先级较高,并可能获得更多内存;而处于底部的小工具的优先级较低,这些小工具的内存会更快地被优先级高的小工具取用。当某个小工具的内存被其他小工具取用时,设备将使用该小工具通过其 CacheAlgorithm 注册表值设置的缓存策略。

    对于小工具开发人员而言,需要认识到的一个重要问题是:不能确保下传到设备上的所有内容都实际保留在该设备上。如果用户要查看已被清除的内容,设备必须通知 Windows 上的这一小工具,以便再次下传已丢弃的内容。如果小工具在可接受的时间范围(此时间视设备而异,在该模拟器上为三秒)内未发送缺失的内容,则设备将通知用户内容已缺失。与本机 SideShow API 不同,托管 SideShow 库可以缓存 Windows 上的所有内容,只要小工具进程始终存在并在 Windows Vista 上运行,托管 SideShow 库就会自动将内容发回到设备中。

    小工具生存期

    要使小工具能够向 SideShow 设备下载信息,Windows 必须正在运行该小工具。主要有两种小工具:UI 小工具和非 UI 小工具。UI 小工具是用户运行并与之交互的应用程序。例如,我们来设想一个 Windows 窗体应用程序,用户可通过 Windows 资源管理器调用该应用程序。当用户控制此应用程序时,它可以将数据下载到设备中。如果用户终止该应用程序,信息将保留在设备上,当计算机关闭时,用户仍可访问这些信息。此应用程序的生存期完全由用户决定。Microsoft Office Outlook 2007 小工具就是 UI 小工具的一个示例。

    非 UI 小工具根本不显示任何用户界面。它在后台运行,可能监控某些内容,并定期向设备发送数据,以使用户在计算机关闭时可以查看这些数据。为了使用户不觉察到非 UI 小工具的存在,Windows 提供了一种机制,可以在无需用户干预的情况下自动调用非 UI 小工具。只要用户登录到其帐户,从睡眠状态恢复计算机,或使用 SideShow 控制面板小程序从小工具连接设备或断开设备连接,Windows 就会通过执行其 StartCommand 注册表值,自动调用注册表中现有的所有小工具。

    Windows 在此并不使用任何复杂的算法;而只是调用所有注册的小工具。这意味着,小工具应用程序可能已在运行,如果用户连接设备或断开设备连接,Windows 将只是再次运行此应用程序。因此,非 UI 小工具应立即检查是否正在运行另一个实例,如果确实如此,则附加实例应立即自行终止。此外,如果用户从非 UI 小工具断开了所有设备,则该小工具通常将自行终止。有关这一点的更多信息,请参阅本文后面的“事件”部分。

    UI 小工具也希望确保只有一个实例正在执行,以防止每个应用程序篡改由另一个实例向设备发送的数据。再者,通常您不希望 Windows 自动调用 UI 小工具(因为 UI 将显示在用户面前),因此,大多数 UI 小工具根本不应具有 StartCommand 注册表值。

    内容

    所有小工具都向设备下传内容。设备具有主显示屏,可显示与设备连接的所有小工具。在图 9 中,左上角的图像显示了主显示屏示例。如您所见,对于每个小工具都显示了图标、名称以及一些文本(可选)。图标和名称来自 Icon 注册表值和 FriendlyName 注册表值。此时显示的文本称为简介内容,这些文本是当小工具正在运行时,通过调用 SideShowGadget 的 AddGlanceContent 方法从小工具向设备发送的内容。

    导航小工具屏幕

    图 9a 设备主页 (单击该图像获得较大视图)

    图 9b 小工具主页(内容 ID 1) (单击该图像获得较大视图)

    图 9c 文本页(内容 ID 2) (单击该图像获得较大视图)

    图 9d 图像页(内容 ID 3 显示图像(内容 ID 1000)) (单击该图像获得较大视图)

    当用户在设备上进入小工具时,设备将呈现先前当小工具在 Windows 上运行时从小工具下载的内容。目前,SideShow 支持两种不同类型的内容:简单内容格式 (SCF) 和 iCal;本文不讨论后者。SCF 内容是从小工具应用程序向设备发送的一组 XML 字符串。设备对 XML 字符串进行分析,以便在设备上呈现内容。

    新的 SCF 格式使小工具应用程序能够定义三种类型的内容:文本和图像,菜单和上下文菜单(包含用于开始导航到其他内容的项),对话框(向用户显示与导航至其他内容相关的问题)。在 windowssdk.msdn.microsoft.com/ms744133.aspx 中可以找到有关 SCF XML 架构的详细信息。

    托管 SideShow 程序集 (Microsoft.SideShow.dll) 包含一个公共的静态 Scf 类,其中包含一系列使您能够轻松地在代码中创建 XML 字符串的静态方法。DownloadDataToDevices 方法(如图 10 所示)演示了如何打开 ScfSideShowGadget 和发送简介字符串内容。此示例还说明了如何调用 ScfSideShowGadget 的 AddContent 方法,以便向设备发送 SCF 菜单、SCF 文本和 SCF 图像内容。如您所见,每条内容都由一个内容 ID 号标识。小工具的第一页(图 9 中左下角的图像)是其主页,该页的内容 ID 始终为 1(由 ScfSideShowGadget 的 HomePageContentId 常量表示)。当用户选择“查看文本”菜单项时,设备将导航至 ID 为 2 的内容页;当用户选择“查看图像”菜单项时,设备将导航至 ID 为 3 的内容页。第 3 页(图像页)包含的 XML 描述应如何显示图像(居中和自动调整)。该页还引用此实际图像,我为其分配的内容 ID 为 1000。在我的代码中,我已从程序集资源中提取了该图像。

    Figure 10 DownloadDataToDevices 方法

    复制代码

    private static void DownloadDataToDevices() {
       // Construct a SCF SideShow gadget for our gadget's Guid
       using (ScfSideShowGadget gadget = new ScfSideShowGadget(s_gadgetId)) 
       {
          // Add Glance content showing date/time of last update
          gadget.AddGlanceContent(
             String.Format("Content updated on {0}{1:D}.", 
                Environment.NewLine, DateTime.Now));
    
          // The home page is a menu with an item that goes to some 
          // text and another item that goes to an image
          gadget.AddContent(
             Scf.Menu(ScfSideShowGadget.HomePageContentId, 
                "Simple Gadget Menu", ScfSelectAction.Target,
                Scf.Item(2, "See text"), Scf.Item(3, "See image")));
    
          // This is the text page
          gadget.AddContent(
             Scf.Content(2, "This is the Text Page",
                Scf.Txt(ScfAlign.Left, true, Color.Red, 
                   "This is some text")));
    
          // This is the image page
          gadget.AddContent(
             Scf.Content(3, "This is the Image Page",
                Scf.Img(1000, ScfAlign.Center, ScfImageFit.Auto, 
                   "alt picture text")));
    
          // This is the image itself (that appears on the image page)
          Stream imageStream = Assembly.GetEntryAssembly().
             GetManifestResourceStream(
                "SimpleSideShowGadget.Aidan And Jeff.jpg"); 
          gadget.AddContent(1000, ImageContentTransforms.ReduceColorDepth | 
             ImageContentTransforms.StretchToFit,
             Image.FromStream(imageStream));
       }
    }

    功能、事件和通知

    小工具应用程序可以对 Windows 发出查询,询问有多少台设备连接到该应用程序以及这些设备具有哪些功能。功能示例包括 DeviceId、ScreenType(位图或文本)、ScreenWidth、ScreenHeight、ClientAreaWidth、ClientAreaHeight、ColorDepth 和 SupportedImageFormats。

    当小工具应用程序决定向设备下传哪些内容时,可能会用到这些设备功能。与本文关联的示例应用程序说明了小工具应用程序如何查询与之连接的设备数,以及如何查询这些设备的功能。

    当小工具应用程序正在运行时,它可以通过注册多个事件来从设备接收事件(如图 11 所述)。SideShowGadget 类型(所有小工具类型的基类)提供了适用于所有小工具(不考虑端点)的事件。ScfSideShowGadget 类型(从 SideShowGadget 派生)提供了特定于 SCF 小工具端点的附加事件。应用程序可以响应这些事件,以便添加或移除内容。复杂的小工具可能要求它始终处于执行状态,以便正确地响应这些事件。如果要求这样,则小工具应将其 OnlineOnly 注册表值设置为 1。

    Figure 11 小工具可以响应的设备事件

    事件
    描述

    DeviceAdded
    当用户将设备连接到小工具应用程序时引发。此时将向接收方法传递设备的功能。

    DeviceRemoved
    当用户从小工具应用程序断开设备连接时引发。此时将向接收方法传递设备的功能。

    AllDevicesRemoved
    当用户已从小工具断开所有设备的连接时引发。通常,当非 UI 小工具收到此事件时,它将自行终止。

    ContentMissing
    当用户试图在设备上导航已缺失的内容时引发。此时,将向接收方法传递缺失内容的 ID。如前面所述,托管包装将所有内容保存在一个集合中。如果设备由于小工具的缓存策略(由其 CacheAlgorithm 注册表值设置)而丢弃内容,则托管包装会自动将这些内容发回到设备中,此时代码将不会收到此事件。这是采用托管 API 而不采用本机 API 所存在的重要优势之一。

    GadgetEnter
    当用户在设备上进入小工具时引发。

    GadgetExit
    当用户在设备上退出小工具时引发。

    ContentNavigate
    仅限 SCF 小工具。当用户从一个内容页导航到另一个内容页时引发。此时,将向接收方法传递上一页 ID、目标页 ID 以及导致发生导航的按钮。

    MenuSelect
    仅限 SCF 小工具。当用户从菜单中选择菜单项时引发。此时,将向接收方法传递上一页 ID、目标页 ID、菜单项 ID 以及导致发生菜单选择的按钮。

    ContextMenuSelect
    仅限 SCF 小工具。当用户从上下文菜单中选择菜单项时引发。此时,将向接收方法传递上一页 ID、目标页 ID、上一项 ID、菜单页 ID 以及菜单项 ID。

    当小工具正在运行时,它可以通过调用 SideShowGadget 的 ShowNotification 方法向 SideShow 设备发送通知。小工具应用程序将针对诸如会议提醒、电子邮件通知、传入的即时消息或系统通知等这类事件显示通知。通知类似于消息框,但不同的一点是它显示在硬件设备上。通知由 ID 号、图标、字符串标题、字符串消息以及过期时间组成。然后,设备显示此通知,直到用户清除通知或已到过期时间。应用程序还可以撤消通知,具体方法是调用 SideShowGadget 的 RevokeNotification 方法并向其传递此通知的 ID 号。

    总结

    在本文中,我介绍了 Windows SideShow 功能的目标,并深入探讨了最终用户如何配置小工具并与之交互。我还说明了开发人员如何将 SideShow 支持集成到新的或现有的托管应用程序中。通过使用这些托管包装,您能够轻松地将 SideShow 功能集成到您自己的应用程序中。

    我个人认为新的 Windows SideShow 功能非常出色,因为它向用户提供了访问数据以及与数据进行交互的新方法。我期盼着在未来几年中,市场上会涌现出大量支持 SideShow 的新硬件设备。特别是,我迫切期待 Media Center 遥控器和移动电话能够支持 SideShow 技术。不久,这些难以置信的、用途广泛的设备将与 PDA 或手机一样普及。

    冯瑞涛
  • 相关阅读:
    Codeforces 662D International Olympiad【贪心】
    LightOJ 1236 Pairs Forming LCM【整数分解】
    LightOJ 1341 Aladdin and the Flying Carpet【整数分解】
    LightOJ 1370 Bi-shoe and Phi-shoe【欧拉函数 && 质数】
    SGU 106 The equation【扩展欧几里得】
    unity 第三人称控制移动
    unity Animator做简单的人物动画
    unity 背包系统
    unity 针对UI的射线穿透的两种方式
    用角色控制器控制移动和碰撞
  • 原文地址:https://www.cnblogs.com/finehappy/p/1495410.html
Copyright © 2020-2023  润新知