IoT Shell 概述

本文档介绍 IoT Shell、前台和后台应用程序,以及如何在设备上这些应用程序之间导航。

IoT Shell、前台和后台应用

IoT 核心版设备运行 IoT Shell。 它拥有许多职责,但其主要工作是确保启动已注册的启动应用。 其模式分为两种:有外设和无外设。 在有外设模式下,IoT Shell 将启动单个已注册的启动应用,该应用将全屏显示其 UI(也称为“有外设应用”)。 有外设模式会假定你已将其连接到屏幕,并且显示用户界面。 在无外设模式(详细说明请参阅此处)下,将不显示用户界面,IoT Shell 仅会启动后台应用程序。

前台应用程序与后台应用程序之间的主要差异如下:

  • 前台应用程序拥有用户界面。 当设备处于外设模式时,其中一个会在启动时开启。 所有前台应用均已在设备上注册,在设备上操作时,用户可以在前台应用之间切换。

  • 后台应用程序没有用户界面,因此可通过关闭用户界面堆栈,节省设备资源。 后台应用程序通常在启动时持续运行,通常用于监视设备。

借助 Home 应用在应用之间切换

目前,通过启动应用,你可以为 Windows 10 IoT 核心版创建主页应用,从而在不同的前台应用程序之间切换。

IoT 启动应用(示例)是一个简单的启动应用,可列出设备上已安装的应用,然后使用 PackageManager API 启动一个应用。

使用 HID 注入键在两个应用之间切换

以下说明介绍了如何通过注册表项打开热键支持。 要生成自己的映像,并且想要支持以下热键(主页、上一个应用和下一个应用)但无需访问注册表,可以包括一个可处理这些步骤的可选功能包。

要查找的功能包称为“Microsoft-OneCore-IoTUAP-Shell-HotKeys-Feature-Package.cab”,该功能称为“IOT_SHELL_HOTKEY_SUPPORT”。 请参阅 Settings.HotKey 示例包查看有关示例。

本文档的其余部分介绍了如何手动实现此功能。

返回“主页”

借助 Windows 10 IoT 周年更新 (1607),IoT Shell 支持在运行另一个应用程序时,通过按“去主页”键(设置为键盘上的“Windows 按钮”版本)将默认应用程序窗口引入前台。 如果 IoT 设备上没有键盘,并且需要通过 HID 注入注入低级别键盘事件,或者如果只想将“去主页”功能重新映射到应用中的不同键,可以在注册表中调整键值。 例如,要启用按 ESCAPE 键 (0x1B) 以“去主页”,请在注册表中输入以下命令:

“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\HotKeys” “HOME” QWORD    0x0000000 0000001B  

REG 文件会如下所示:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\HotKeys]
"Home"=hex(b):1B,00,00,00,00,00,00,00

在两个应用之间切换

或者,要在两个前台应用之间切换,可以通过在注册表中输入以下命令,在映像中设置 Alt-Tab(下一个应用)和 Shift-Alt-Tab(上一个应用)功能:

“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\HotKeys” “PREV” QWORD 0x00010000 00010009 “NEXT” QWORD 0x00020000 00050009

REG 文件会如下所示:[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\HotKeys] "Prev"=hex(b):09,00,01,00,00,00,01,00 "Next"=hex(b):09,00,05,00,00,00,02,00

位元转换

上述 REG 文件条目按从左到右解码,如下所示:

  • 位 0-15:虚拟键代码(即 1B,00 表示 ESCAPE)。 有关键代码值的完整列表,请参阅虚拟键代码
  • 位 16-19:修改键。 0x0 = 无修饰符,0x1 = ALT,0x2 = CTRL,0x4 = SHIFT。 组合键会将值汇总在一起(即 ALT+SHIFT 为 0x5)
  • 位 20-47:保留供将来使用;必须为 0
  • 位 48-62:操作
    • 0 = 主页
    • 1 = 上一个视图(可能在将来的版本中不起作用)
    • 2 = 下一个视图(可能在将来的版本中不起作用)
  • 位 63:保留;必须为 0