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

# IGameInput::RegisterDeviceCallback

> IGameInput::RegisterDeviceCallback

# IGameInput::RegisterDeviceCallback

デバイスがシステムに接続または切断されるたびに呼び出される GameInputDeviceCallback 関数を登録します。また、デバイスのプロパティが変更されたときにも関数を呼び出すことができます。

## 構文

```cpp theme={null}
HRESULT RegisterDeviceCallback(
    IGameInputDevice* device,
    GameInputKind inputKind,
    GameInputDeviceStatus statusFilter,
    GameInputEnumerationKind enumerationKind,
    void* context,
    GameInputDeviceCallback callbackFunc,
    GameInputCallbackToken* callbackToken
);
```

### パラメーター

*device*   \_In\_opt\_\
型: IGameInputDevice\*

登録されたコールバックを特定のデバイスに対してのみトリガーされるように制限します。

*inputKind*   \_In\_\
型: [GameInputKind](/reference/input/gameinput/enums/gameinputkind)

登録されたコールバックを、指定された入力種別の少なくとも 1 つをサポートするデバイスに対してのみトリガーされるように制限します。

*statusFilter*   \_In\_\
型: [GameInputDeviceStatus](/reference/input/gameinput/enums/gameinputdevicestatus)

登録されたコールバックを、特定のタイプのデバイス ステータス変化に対してのみトリガーされるように制限します。

*enumerationKind*   \_In\_\
型: [GameInputEnumerationKind](/reference/input/gameinput/enums/gameinputenumerationkind)

デバイスが列挙されるかどうか、および関数が列挙の完了を待機するかどうかを決定します。

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

コールバック関数に関連する情報を提供するオブジェクト。通常は呼び出し元のオブジェクト。

*callbackFunc*   \_In\_\
型: [GameInputDeviceCallback](/reference/input/gameinput/functions/gameinputdevicecallback)

デバイスの接続または切断イベント用に登録するタイトル定義コールバック。

*callbackToken*   \_Result\_zeroonfailure\_\
型: GameInputCallbackToken\*

登録されたコールバック関数を識別するトークン。このトークンは、コールバック関数をキャンセルまたは登録解除する必要がある場合に、登録された関数を識別するために使用されます。

### 戻り値

型: HRESULT

関数の結果。

## 解説

**IGameInput::RegisterDeviceCallback** で登録される関数は、接続や切断などのデバイスの状態変化に対応するために使用できます。認識可能な状態変化のタイプは [GameInputDeviceStatus](/reference/input/gameinput/enums/gameinputdevicestatus) にリストされています。

*enumerationKind* パラメーターを使用して、初回のコールバック処理を発生させることができます。これは、システムに接続されている各デバイスに対して 1 つずつです。この初期列挙は非同期または同期列挙に設定できます。同期列挙では、**IGameInput::RegisterDeviceCallback** が返る前にすべての初期コールバックが呼び出されます。

次の C++ サンプルは、接続されているゲームパッドとキーボードを明示的に列挙する方法を示します。

```cpp theme={null}
Microsoft::WRL::ComPtr<IGameInput> gameInput;

void CALLBACK OnDeviceEnumerated(
    _In_ GameInputCallbackToken callbackToken,
    _In_ void * context,
    _In_ IGameInputDevice * device,
    _In_ uint64_t timestamp,
    _In_ GameInputDeviceStatus currentStatus,
    _In_ GameInputDeviceStatus previousStatus)
{
    // Application-specific code to handle the enumerated device
}

void EnumerateDevicesWorker() noexcept
{
    GameInputCallbackToken token;
    if (SUCCEEDED(gameInput->RegisterDeviceCallback(
        nullptr,                                      // Don't filter to events from a specific device
        GameInputKindGamepad | GameInputKindKeyboard, // Enumerate gamepads and keyboards
        GameInputDeviceAnyStatus,                     // Any device status
        GameInputBlockingEnumeration,                 // Enumerate synchronously
        nullptr,                                      // No callback context parameter
        OnDeviceEnumerated,                           // Callback function
        &token)))                                     // Generated token
    {
        gameInput->UnregisterCallback(token, 5000);
    }
}
```

次の C++ サンプルは、デバイスが接続または切断されたときに通知を受ける方法を示します。

```cpp theme={null}
Microsoft::WRL::ComPtr<IGameInput> gameInput;

void CALLBACK OnDeviceConnectionChanged(
    _In_ GameInputCallbackToken callbackToken,
    _In_ void * context,
    _In_ IGameInputDevice * device,
    _In_ uint64_t timestamp,
    _In_ GameInputDeviceStatus currentStatus,
    _In_ GameInputDeviceStatus previousStatus,
    )
{
    if (currentStatus & GameInputDeviceConnected)
    {
        // Application-specific code to handle the device connection
    }
    else
    {
        // Application-specific code to handle the device disconnection
    }
}

void MonitorDeviceConnectionChanges(
    _In_ volatile bool & cancelMonitoring) noexcept
{
    GameInputCallbackToken token;
    if (SUCCEEDED(gameInput->RegisterDeviceCallback(
        nullptr,                                      // Don't filter to events from a specific device
        GameInputKindGamepad | GameInputKindKeyboard, // Listen for Gamepad and Keyboard changes
        GameInputDeviceConnected,                     // Notify on changes to GameInputDeviceConnected status
        GameInputAsyncEnumeration,                    // Enumerate initial devices asynchronously
        nullptr,                                      // No callback context parameter
        OnDeviceConnectionChanged,                    // Callback function
        &token)))                                     // Generated token
    {
        while (!cancelMonitoring)
        {
            Sleep(100);
        }

        gameInput->UnregisterCallback(token, 5000);
    }
}
```

## 要件

[Input API の概要](/build/core-features/common/input/overviews/input-overview)\
[IGameInput](/reference/input/gameinput/interfaces/igameinput/igameinput)\
[IGameInput::UnregisterCallback](/reference/input/gameinput/interfaces/igameinput/methods/igameinput_unregistercallback)\
[IGameInput::StopCallback](/reference/input/gameinput/interfaces/igameinput/methods/igameinput_stopcallback)

## バージョン履歴

| バージョン  | 変更内容     |
| ------ | -------- |
| **v0** | 導入されました。 |


## Related topics

- [IGameInput::StopCallback](/ja-jp/reference/input/gameinput/interfaces/igameinput/methods/igameinput_stopcallback.md)
- [GameInputDeviceCallback](/ja-jp/reference/input/gameinput/functions/gameinputdevicecallback.md)
- [IGameInput::UnregisterCallback](/ja-jp/reference/input/gameinput/interfaces/igameinput/methods/igameinput_unregistercallback.md)
- [GameInputDeviceStatus](/ja-jp/reference/input/gameinput/enums/gameinputdevicestatus.md)
- [GameInputEnumerationKind](/ja-jp/reference/input/gameinput/enums/gameinputenumerationkind.md)
