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

Registra una función GameInputDeviceCallback a la que se llama cada vez que un dispositivo se conecta o se desconecta del sistema. También permite que se llame a la función cuando cambian las propiedades de un dispositivo.

## Sintaxis

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

### Parámetros

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

Limita la devolución de llamada registrada para que solo se desencadene para un dispositivo específico.

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

Limita la devolución de llamada registrada para que solo se desencadene para dispositivos que admitan al menos uno de los tipos de entrada especificados.

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

Limita la devolución de llamada registrada para que solo se desencadene para tipos específicos de cambios de estado del dispositivo.

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

Determina si se enumerarán los dispositivos y si la función esperará a que se complete la enumeración.

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

Un objeto que proporciona información relevante para la función de devolución de llamada. Normalmente, el objeto que realiza la llamada.

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

La devolución de llamada definida por el título que se registra para el evento de conexión o desconexión del dispositivo.

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

Token que identifica la función de devolución de llamada registrada. Este token se usa para identificar la función registrada en caso de que necesite cancelar o anular el registro de la función de devolución de llamada.

### Valor devuelto

Tipo: HRESULT

Resultado de la función.

## Comentarios

La función registrada mediante **IGameInput::RegisterDeviceCallback** puede usarse para reaccionar a los cambios de estado del dispositivo, como una conexión o desconexión. Los tipos de cambios de estado reconocibles se enumeran en [GameInputDeviceStatus](/reference/input/gameinput/enums/gameinputdevicestatus).

El parámetro *enumerationKind* puede usarse para provocar una ráfaga inicial de devoluciones de llamada: una por cada dispositivo conectado al sistema. Esta enumeración inicial puede establecerse como enumeración asincrónica o sincrónica. Una enumeración sincrónica llamará a todas las devoluciones de llamada iniciales antes de que **IGameInput::RegisterDeviceCallback** devuelva el resultado.

En el ejemplo de C++ siguiente se muestra cómo enumerar explícitamente los mandos y teclados conectados.

```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);
    }
}
```

En el ejemplo de C++ siguiente se muestra cómo recibir una notificación cuando un dispositivo se conecta o se desconecta.

```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);
    }
}
```

## Requisitos

[Información general de la API de entrada](/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)

## Historial de versiones

| Versión | Cambios       |
| ------- | ------------- |
| **v0**  | Se introdujo. |


## Related topics

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