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

# XPackageRegisterInstallationProgressChanged

> XPackageRegisterInstallationProgressChanged

# XPackageRegisterInstallationProgressChanged

インストールの進行状況が変化したときに呼び出されるコールバックを登録します。

## Syntax

```cpp theme={null}
HRESULT XPackageRegisterInstallationProgressChanged(  
         XPackageInstallationMonitorHandle installationMonitor,  
         void* context,  
         XPackageInstallationProgressCallback* callback,  
         XTaskQueueRegistrationToken* token  
)  
```

### Parameters

*installationMonitor*   \_In\_\
型: XPackageInstallationMonitorHandle

コールバックを登録するインストール モニターへのハンドル。

*context*   \_In\_opt\_\
型: void\*

コールバックに渡されるコンテキスト。

*callback*   \_In\_\
型: XPackageInstallationProgressCallback\*

インストールの進行状況が変化したときに呼び出されるユーザー定義のコールバック。

*token*   \_Out\_\
型: [XTaskQueueRegistrationToken\*](/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken)

後で [XPackageUnregisterInstallationProgressChanged](/reference/system/xpackage/functions/xpackageunregisterinstallationprogresschanged) を使用してコールバックを登録解除するために使用できる、コールバックを識別するトークン。

### Return value

型: HRESULT

HRESULT の成功またはエラー コード。

## Remarks

ゲームが起動マーカーを実装しており、完全にインストールされる前に実行できるようになっています。ゲームは、どの部分がインストールされていて、どの部分がインストールされていないかを知る必要があります。この例では、ゲームは指定されたトラック名を持つレーストラックに関連付けられているチャンクがいつインストールされるかを知る必要があります。

```cpp theme={null}
void CALLBACK ProgressChangedCallback(
    void* /* context*/,
    XPackageInstallationMonitorHandle monitor)
{
    XPackageInstallationProgress progress;
    XPackageGetInstallationProgress(monitor, &progress);

    if (progress.completed)
    {
        printf("Track ready\n");
        XPackageCloseInstallationMonitorHandle(monitor);
    }
}

HRESULT StartMonitoring(XTaskQueueHandle queue, char* trackName)
{
    char id[XPACKAGE_IDENTIFIER_MAX_LENGTH];

    HRESULT hr = XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
    if (FAILED(hr)) return hr;

    XPackageChunkSelector selector;
    selector.type = XPackageChunkSelectorType::Tag;
    selector.tag = trackName;

    XPackageInstallationMonitorHandle monitor;
    hr = XPackageCreateInstallationMonitor(
        id,         // Identity to be monitored
        1,          // Number of selectors
        &selector,  // Selectors
        1000,       // Resolution of the monitor, in milliseconds
        queue,      // Queue where updates are performed
        &monitor);
    if (FAILED(hr)) return hr;

    XTaskQueueRegistrationToken token;
    hr = XPackageRegisterInstallationProgressChanged(
        monitor,
        nullptr,
        ProgressChangedCallback,
        &token);

    if (FAILED(hr))
    {
        XPackageCloseInstallationMonitorHandle(monitor);
    }

    return hr;
}
```

上記に示したコード内の各 API 呼び出しを順に見ていきましょう。

```cpp theme={null}
XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
```

インストールされているすべてのコンテンツには一意の識別子があります。パッケージの識別子を知っており、そのコンテンツにアクセスできれば、任意のパッケージのインストールを監視できます。実行中のプロセスは、自身のパッケージ識別子を取得できます。パッケージ識別子の詳細については、[ダウンロード可能なコンテンツ (DLC) の管理およびライセンス](https://learn.microsoft.com/gaming/gdk/docs/store/commerce/fundamentals/xstore-manage-and-license-optional-packages) を参照してください。

```cpp theme={null}
XPackageCreateInstallationMonitor(
    id,         // Identity to be monitored
    1,          // Number of selectors
    &selector,  // Selectors
    1000,       // Resolution of the monitor, in milliseconds
    queue,      // Queue where updates are performed
    &monitor);
```

これにより、インストールの状態を追跡するモニターが作成されます。このインストール モニターは、定期的に自身を更新します。インストールの現在の進行状況を取得するには [XPackageGetInstallationProgress](/reference/system/xpackage/functions/xpackagegetinstallationprogress) を呼び出します。インストール中の変化通知を受け取るには、コールバックを登録します。

インストール モニターは、パッケージ全体または特定のサブセットに対して作成できます。ここでは、トラック名に対するインストールの進行状況を知りたいことを示す「セレクター」を定義しています。頻度 (この場合は 1000 ms) を指定して、インストール モニターがスナップショットを更新する最大の頻度を指定できます。時間内に進捗がない場合は、それより遅くなる可能性があります。

```cpp theme={null}
XPackageRegisterInstallationProgressChanged(
    monitor,
    nullptr,
    ProgressChangedCallback,
    &token);
```

トラックの読み込みが完了したタイミングを知りたいので、モニターに対して進行状況変更イベントを登録します。このコールバックは、モニターの作成時に指定されたタスク キューを介して呼び出され、[XPackageCreateInstallationMonitor](/reference/system/xpackage/functions/xpackagecreateinstallationmonitor) で指定した頻度でおおよそ呼び出されます。コールバック内では、ゲーム内で進行状況を描画したり、トラックの準備ができたことをゲームに通知したりできます。

この例では、インストール モニターは閉じますが、通知の登録解除は行いません。インストール モニター通知の有効期間はインストール モニターに連動しているため、モニターを閉じるとそのモニターに対するすべての通知が登録解除されます。

## Requirements

**ヘッダー:** XPackage.h

**ライブラリ:** xgameruntime.lib

**サポートされているプラットフォーム:** Windows、XBOX One ファミリー本体および XBOX Series 本体

## Conceptual documentation

* [インテリジェント デリバリー: 言語指定子](/build/core-features/common/packaging/intelligentdelivery-language)
* [ストリーミング インストール: 状態](/build/core-features/common/packaging/packaging-installstatus)

## See also

[XPackage](/reference/system/xpackage/xpackage_members)\
[ストリーミング インストールとインテリジェント デリバリー](/build/core-features/common/packaging/overviews/streaming_install-intelligent_delivery)\
[XPackageGetInstallationProgress](/reference/system/xpackage/functions/xpackagegetinstallationprogress)\
[XPackageCreateInstallationMonitor](/reference/system/xpackage/functions/xpackagecreateinstallationmonitor)


## Related topics

- [XPackageInstallationProgressCallback](/ja-jp/reference/system/xpackage/functions/xpackageinstallationprogresscallback.md)
- [XPackageUnregisterInstallationProgressChanged](/ja-jp/reference/system/xpackage/functions/xpackageunregisterinstallationprogresschanged.md)
- [ストリーミング インストール: ステータス](/ja-jp/build/core-features/common/packaging/packaging-installstatus.md)
- [XTaskQueueRegistrationToken](/ja-jp/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken.md)
- [XPackage](/ja-jp/reference/system/xpackage/xpackage_members.md)
