> ## 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.

# ゲーム ランチャーとハンドヘルド

> Full Screen Experience 検出、リソース制限、Web テクノロジー、Guide ボタン処理、Windows 上のフォアグラウンド管理を備えたハンドヘルド ゲーム ランチャーを構築します。

ゲーム ランチャーには多くの形態があります。プレイヤーがゲームを開始したとき、一部のゲームは直接開始しません。代わりにランチャーを起動します。多くのゲームやパブリッシャーは、プレイヤーのエンゲージメントを維持する手段としてランチャーに依存しています。ランチャーは、ゲームが本当に開始する前にオプションを設定したり、ゲームの Web サイトを訪問したり、その他のゲーム機能とやり取りしたりするためにも使用できます。これらのランチャーはゲーミング ハンドヘルド デバイスでうまく動作する必要があります。ランチャーもゲームと同様、次の記事のガイダンスに従う必要があります。

* [XBOX が設計した Handheld Compatibility プログラムのガイドライン](/build/gdk-and-engines/handheld/handheld-guidance)
* [ハンドヘルド デバイスに関する追加の考慮事項](/build/gdk-and-engines/handheld/handheld-considerations)

ハンドヘルド デバイスで動作するようにゲームに与えられるガイダンスはランチャーにも等しく適用されますが、開発者が留意すべき追加の考慮事項がいくつかあります。

## Full Screen Experience

ゲーミング ハンドヘルドが起動するとき、OEM はフル スクリーンで動作する専用のゲーミング アプリを起動するようにデバイスを構成できます。たとえば、ASUS ROG XBOX Ally X では、デバイスは XBOX アプリのフル スクリーン バージョンで起動します。プレイヤーはゲームのカタログに簡単にアクセスでき、新しいゲームをエンゲージ、購入する機会を得られます。

OEM は、デフォルトのフル スクリーン アプリを何にするかを構成できます。これが構成されると：

* タスク バー、一部のスタートアップ アプリ、その他のサービスなど、多くの標準的な Windows 体験が抑制されます。この抑制の結果、ゲームで利用可能なメモリが増加します。
* デフォルト アプリは、1 度に 1 つのゲームしか実行されないポリシーを保証できます。
* スリープや休止状態から復帰するとき、プレイヤーはゲームやアプリに戻されます。スリープや休止状態の前にゲームやアプリが閉じられていた場合、プレイヤーはデフォルトのゲーミング アプリに戻されます。
* デバイスがシャットダウン状態から電源投入されると、デフォルト アプリが自動的に起動します。
* ゲームやアプリケーションはフル スクリーン モードで自動的に起動します。

全体として、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) がアクティブ
   }
}
```

デバイス上のプレイヤーは 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) が変更された。アクティブか照会する
    if (IsGamingFullScreenExperienceActive())
    {
      // FSE がアクティブに変わった
    }
    else
    {
      // FSE が非アクティブに変わった
    }
  }, nullptr, &g_fseHandle);
}

// ...

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

Full Screen Experience に関する情報を取得するには、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 コンテンツをナビゲートできる必要があることです。すべての Web 配信コンテンツが HTML Gamepad API を使用してゲームパッドを念頭に置いて設計されていることを確認してください。詳細については、[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

- [PC ハンドヘルド概要](/ja-jp/build/gdk-and-engines/handheld/overview.md)
- [XBOX PC Remote Tools の FAQ とトラブルシューティング ガイド](/ja-jp/tools/tools-pc/xbox-pc-remote-tools/faq.md)
- [Handheld Compatibility ガイドラインとテスト ケース](/ja-jp/build/gdk-and-engines/handheld/handheld-guidelines-and-testcases.md)
- [パフォーマンスと電力効率のバランス](/ja-jp/build/gdk-and-engines/handheld/handheld-performance.md)
- [ハンドヘルド デバイスに関する追加の考慮事項](/ja-jp/build/gdk-and-engines/handheld/handheld-considerations.md)
