XUser 的无外设自动化

对于测试,游戏可能希望自动将用户添加到游戏中。 在使用 Microsoft 游戏开发工具包 (GDK) 的情况下,仅当游戏调用 XUserAddAsync 时,才会添加用户。 就自动化而言,此功能有以下两个主要限制:

  • 如果在使用 AddDefaultUserSilently 标志的情况下调用 XUserAddAsync,则不会获取 UI(有助于实现自动化)。 但是,只能获取启动游戏的用户。 使用此标志重复调用 API 不会更改结果。 你将继续获取针对相同用户的新句柄。
  • 如果在不使用 AddDefaultUserSilently 标志的情况调用 XUserAddAsync,将显示 UI,并等待你按下按钮。 这将中断自动操作。

为了帮助在测试代码中自动添加用户,Microsoft 游戏开发工具包 (GDK) 支持启用无外设选项,可以在其中添加用户而无需具有需要用户输入的 UI 展示。 下面的步骤概述了基本方法。

  1. 要将已登录用户添加到主机,可以使用带 signin 选项的 xbuser(NDA 主题)要求授权 命令行工具。 为每个用户重复此步骤。
  2. 要抑制在游戏中添加用户时通常会显示的 UI,可以使用带 HeadlessXuser 选项的 xbconfig(NDA 主题)要求授权 命令行工具,如下所示。
    xbconfig HeadlessXUser=true
    
  3. 启动游戏。
  4. 进入游戏后,每次调用不带 AddDefaultUserSilently 标志的 XUserAddAsync 都将返回登录到主机的第一位用户,游戏中没有与之关联的未完成 XUserHandle 对象。
  5. 如果游戏继续调用 XUserAddAsync,它们最终会耗尽已登录到主机的用户数。 执行此操作后,XUserAddAsync 将返回 E_ABORT。 当用户取消登录到主机(或以其他方式退出 UI)时,XUserAddAsync 将返回此错误。
  6. 出于测试目的,游戏可能需要指导已登录到主机的测试帐户数。 为了便于操作,游戏可以调用 CreateProcess,并使用 list 选项启动 wduser 命令行工具。