> ## 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 uma função GameInputDeviceCallback para ser chamada sempre que um dispositivo for conectado ou desconectado do sistema. Também permite que a função seja chamada quando as propriedades de um dispositivo forem alteradas.

## Sintaxe

```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 o retorno de chamada registrado para ser disparado somente para um dispositivo específico.

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

Limita o retorno de chamada registrado para ser disparado somente para dispositivos que dão suporte a pelo menos um dos tipos de entrada especificados.

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

Limita o retorno de chamada registrado para ser disparado somente para tipos específicos de alterações de status do dispositivo.

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

Determina se os dispositivos serão enumerados e se a função aguardará a conclusão da enumeração.

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

Algum objeto que fornece informações relevantes para a função de retorno de chamada. Normalmente, o objeto chamador.

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

O retorno de chamada definido pelo título a ser registrado para o evento de dispositivo conectado ou desconectado.

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

Token que identifica a função de retorno de chamada registrada. Esse token é usado para identificar a função registrada caso você precise cancelar ou cancelar o registro da função de retorno de chamada.

### Valor retornado

Tipo: HRESULT

Resultado da função.

## Comentários

A função registrada por **IGameInput::RegisterDeviceCallback** pode ser usada para reagir a alterações de estado no dispositivo, como uma conexão ou desconexão. Os tipos de alterações de estado reconhecíveis estão listados em [GameInputDeviceStatus](/pt-BR/reference/input/gameinput/enums/gameinputdevicestatus).

O parâmetro *enumerationKind* pode ser usado para gerar uma rodada inicial de retornos de chamada - um para cada dispositivo conectado ao sistema. Essa enumeração inicial pode ser definida como uma enumeração assíncrona ou síncrona. Uma enumeração síncrona chamará todos os retornos de chamada iniciais antes que **IGameInput::RegisterDeviceCallback** retorne.

O exemplo de C++ a seguir demonstra como enumerar explicitamente os gamepads e 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);
    }
}
```

O exemplo de C++ a seguir demonstra como ser notificado quando um dispositivo é conectado ou desconectado.

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

[Visão geral da API de entrada](/pt-BR/build/core-features/common/input/overviews/input-overview)\
[IGameInput](/pt-BR/reference/input/gameinput/interfaces/igameinput/igameinput)\
[IGameInput::UnregisterCallback](/pt-BR/reference/input/gameinput/interfaces/igameinput/methods/igameinput_unregistercallback)\
[IGameInput::StopCallback](/pt-BR/reference/input/gameinput/interfaces/igameinput/methods/igameinput_stopcallback)

## Histórico de versões

| Versão | Alterações |
| - | - |
| **v0** | Introduzido. |


## Related topics

- [IGameInput::RegisterDeviceCallback](/reference/input/gameinput/interfaces/igameinput/methods/igameinput_registerdevicecallback.md)
- [GameInputDeviceCallback](/reference/input/gameinput/functions/gameinputdevicecallback.md)
- [IGameInput::StopCallback](/reference/input/gameinput/interfaces/igameinput/methods/igameinput_stopcallback.md)
