> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 游戏启动器与掌机

> 在 Windows 上构建掌机游戏启动器,处理 Full Screen Experience 检测、资源限制、Web 技术、Guide 按钮处理与前台管理。

游戏启动器可以有多种形式。当玩家启动游戏时,有些游戏并不直接开始,而是先启动一个启动器。许多游戏和发行商依赖启动器来保持玩家的持续参与。启动器还可以用于在游戏真正开始前设置选项、访问游戏网站或与其他游戏功能交互。这些启动器需要在游戏掌机设备上运行良好。启动器与游戏一样,也需要遵循以下文章中的指南。

* [XBOX 设计的 Handheld Compatibility 计划准则](/build/gdk-and-engines/handheld/handheld-guidance)
* [掌机设备的其他注意事项](/build/gdk-and-engines/handheld/handheld-considerations)

针对让游戏在掌机上工作良好而提供的指南,同样适用于启动器,但启动器还有一些开发者需要额外考虑的事项。

## Full Screen Experience(FSE)

游戏掌机启动时,OEM 可以将其配置为启动一个全屏运行的专用游戏应用。例如,在 ASUS ROG XBOX Ally X 上,设备会启动到全屏版本的 XBOX 应用。玩家可以方便地访问自己的游戏目录,并有机会参与与购买新游戏。

OEM 可以配置默认的全屏应用。启用后:

* 许多标准 Windows 体验会被抑制,例如任务栏、部分启动应用与其他服务。这种抑制让游戏可用的内存更多。
* 默认应用可以强制执行“同时只运行一个游戏”的策略。
* 从睡眠或休眠恢复时,玩家会被带回游戏或应用。如果在进入睡眠或休眠前游戏与应用已关闭,则玩家被带回默认游戏应用。
* 设备从关机状态开机时,默认应用会自动启动。
* 游戏与应用会自动以全屏模式启动。

在 Windows 中,这被称为 *全屏体验*(Full Screen Experience,FSE)。

要在游戏掌机上判断 FSE 是否处于活动状态,可让你的游戏调用 `IsGamingFullScreenExperienceActive` 函数。以下代码示例展示了该函数的用法。

```cpp theme={null}
#include <gamingexperience.h>
#pragma comment(lib, "windowsapp.lib")

if (IsApiSetImplemented("api-ms-win-gaming-experience-l1-1-0"))
{
   if (IsGamingFullScreenExperienceActive())
   {
      // Full Screen Experiences (FSE) is active
   }
}
```

设备上的玩家可以开启或关闭 FSE。应用和游戏可以通过 **RegisterGamingFullScreenExperienceChangeNotification** 函数注册变更通知,从而获知这些变化。要取消注册,请使用 **UnregisterGamingFullScreenExperienceChangeNotification** 函数。以下代码示例展示了如何注册变更通知。响应通知时,请务必再查询一次 FSE 的当前状态。

```cpp theme={null}
static GAMING_FULL_SCREEN_EXPERIENCE_REGISTRATION g_fseHandle = nullptr;

// ...

if (IsApiSetImplemented("api-ms-win-gaming-experience-l1-1-0"))
{
  RegisterGamingFullScreenExperienceChangeNotification([](PVOID)
  {
    // Full Screen Experience (FSE) changed, query if active
    if (IsGamingFullScreenExperienceActive())
    {
      // FSE has changed to active
    }
    else
    {
      // FSE has changed to inactive
    }
  }, nullptr, &g_fseHandle);
}

// ...

if (IsApiSetImplemented("api-ms-win-gaming-experience-l1-1-0"))
{
   UnregisterGamingFullScreenExperienceChangeNotification(g_fseHandle);
}
```

要获取关于全屏体验的信息,请使用 Windows SDK 10.0.26100.3916 或更高版本(2025 年 4 月发布)。

## 资源

游戏启动器经常在后台运行并占用内存等资源。相比典型 PC,游戏掌机的内存与资源有限。因此,游戏启动器需要遵循最佳实践,为玩家提供最佳体验。

* 启动器不在前台时,尽量减少其资源占用。
* 启动器成功启动游戏后,可考虑关闭启动器(至少减少其资源使用),把更多资源留给游戏。
* 避免安装到任务栏托盘,因为在 FSE 下玩家看不到它。
* 确保玩家有方便的方式关闭启动器。
* 与游戏一样,考虑启动器如何最大程度地降低[功耗](/build/gdk-and-engines/handheld/handheld-considerations#power)与对续航的影响。

## Web 技术

启动器经常依赖 HTML 来呈现内容。与启动器的其他部分以及在掌机上运行良好的开发者指南一致,请确保以下要求:

* HTML 内容在默认情况下就能在距离脸部 12 英寸(30.5 cm)、7 英寸(17.8 cm)屏幕上表现良好且可读。
* 任何图标提示对该设备都是准确的。
* 文本输入使用虚拟键盘,不依赖物理键盘。

最重要的是,用户必须能够使用手柄浏览任何 HTML 内容。请通过 HTML Gamepad API 让所有 Web 交付的内容都以手柄为设计出发点。更多信息参见 [Using the Gamepad API - Web APIs | MDN](https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API)。

## 游戏叠加层与 Guide 按钮

FSE 处于活动状态时,Windows 会独占手柄上的 **Guide** 按钮。玩家在 Full Screen Experience 中短按 **Guide** 按钮会调出 XBOX Game Bar。玩家可以快速访问系统实用工具和 OEM 小组件。XBOX Game Bar 可以通过 Game Bar Widget SDK 扩展。更多信息参见 [XBOX Game Bar SDK](https://learn.microsoft.com/gaming/game-bar/)。

为了兼容现有使用 **Guide** 按钮的体验,玩家可以按 **View+Menu** 向获焦应用发送 **Guide** 按键事件。手柄驱动会将 **View**、**Menu** 和 **Guide** 按键作为输入负载的一部分发送。长按 **Guide** 按钮会打开经过优化的 **Task Switcher**,玩家可以在其中的选中应用上按 **View** 发送 **Guide** 按键。

## 前台与后台管理

在 FSE 下,游戏与启动器不需要为 Windows 前台管理做任何特殊处理。请确保它们的前台窗口管理在 Windows 上(不论 FSE 是否激活)都能正确工作。

Windows 设计的目标是让玩家掌控他们正在交互的窗口。前台窗口可以把其他应用带到前台,但后台应用无法自行获取前台。Windows 将前台控制作为操作系统级别的特权来强制执行。

对于游戏与启动器常见的一些场景,应用需要更明确地控制前台管理。例如,某些游戏可能是单实例的,新进程被激活时会将激活重定向回已经在后台运行的实例。新进程需要显式地将前台特权转移回已运行的进程。游戏通过 [AllowSetForegroundWindow](https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow)、[CoAllowSetForegroundWindow](https://learn.microsoft.com/windows/win32/api/objbase/nf-objbase-coallowsetforegroundwindow) 和 [SetForegroundWindow](https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-setforegroundwindow) 来处理这些转移。

FSE 未激活时(这是 Windows 上游戏的默认状态),错误的前台行为对玩家影响不大。应用图标会在任务栏中闪烁以引起注意,玩家选择图标后,应用就会进入前台。

FSE 激活时,任务栏被隐藏。因此,玩家不太可能注意到位于后台的窗口,也无从主动切换。


## Related topics

- [Handheld Compatibility 准则与测试用例](/zh-CN/build/gdk-and-engines/handheld/handheld-guidelines-and-testcases.md)
- [在性能与能效之间取得平衡](/zh-CN/build/gdk-and-engines/handheld/handheld-performance.md)
- [打包概述](/zh-CN/build/core-features/common/packaging/overviews/packaging.md)
- [使用 GDK 工具安装并启动 PC 游戏](/zh-CN/tools/tools-pc/launching-on-pc.md)
- [游戏存档概述](/zh-CN/services/playfab/player-progression/game-saves/overview.md)
