Partilhar via


Visão geral da entrada bruta

Há muitos dispositivos de entrada do usuário ao lado do teclado e mouse tradicionais. Por exemplo, a entrada do usuário pode vir de um joystick, uma tela sensível ao toque, um microfone ou outros dispositivos que permitem grande flexibilidade na entrada do usuário. Esses dispositivos são coletivamente conhecidos como Dispositivos de Interface Humana (HIDs). A API de entrada bruta fornece uma maneira estável e robusta para os aplicativos aceitarem entrada bruta de qualquer HID, incluindo o teclado e o mouse.

Esta secção abrange os seguintes tópicos:

Modelo de entrada bruto

Anteriormente, o teclado e o mouse normalmente geravam dados de entrada. O sistema interpretou os dados provenientes desses dispositivos de uma forma que eliminou os detalhes específicos do dispositivo das informações brutas. Por exemplo, o teclado gera o código de verificação específico do dispositivo, mas o sistema fornece um aplicativo com o código de chave virtual. Além de esconder os detalhes da entrada bruta, o gerenciador de janelas não suportava todos os novos HIDs. Para obter entrada dos HIDs não suportados, um aplicativo tinha que fazer muitas coisas: abrir o dispositivo, gerenciar o modo compartilhado, ler periodicamente o dispositivo ou configurar a porta de conclusão de E/S e assim por diante. O modelo de entrada bruta e as APIs associadas foram desenvolvidas para permitir o acesso simples à entrada bruta de todos os dispositivos de entrada, incluindo o teclado e o mouse.

O modelo de entrada bruto é diferente do modelo de entrada original do Windows para teclado e mouse. No modelo de entrada original, um aplicativo recebe entrada independente do dispositivo na forma de mensagens que são enviadas ou postadas em suas janelas, como WM_CHAR, WM_MOUSEMOVEe WM_APPCOMMAND. Por outro lado, para entrada bruta, um aplicativo deve registrar os dispositivos dos quais deseja obter dados. Além disso, o aplicativo obtém a entrada bruta através da mensagem WM_INPUT.

Existem várias vantagens para o modelo de entrada bruta:

  • Um aplicativo não precisa detetar ou abrir o dispositivo de entrada.
  • Um aplicativo obtém os dados diretamente do dispositivo e processa os dados para suas necessidades.
  • Um aplicativo pode distinguir a fonte da entrada, mesmo que seja do mesmo tipo de dispositivo. Por exemplo, dois dispositivos de mouse.
  • Um aplicativo gerencia o tráfego de dados especificando dados de uma coleção de dispositivos ou apenas tipos de dispositivos específicos.
  • Os dispositivos HID podem ser usados à medida que se tornam disponíveis no mercado, sem esperar por novos tipos de mensagens ou por um sistema operativo atualizado para ter novos comandos no WM_APPCOMMAND.

Note que WM_APPCOMMAND oferece suporte para alguns dispositivos HID. No entanto, WM_APPCOMMAND é um evento de entrada independente de dispositivo de nível superior, enquanto WM_INPUT envia dados brutos de baixo nível específicos para um dispositivo.

Registo para Raw Input

Por padrão, nenhum aplicativo recebe entrada bruta. Para receber entrada bruta de um dispositivo, um aplicativo deve registrar o dispositivo.

Para registrar dispositivos, um aplicativo primeiro cria uma matriz de estruturas de RAWINPUTDEVICE que especificam o TLC ( de coleta de nível superior) para os dispositivos desejados. O TLC é definido por uma Página de Uso ( a classe do dispositivo) e um ID de Uso ( o dispositivo dentro da classe). Por exemplo, para obter o teclado TLC, defina UsagePage = 0x01 e UsageID = 0x06. O aplicativo chama RegisterRawInputDevices para registrar os dispositivos.

Observe que um aplicativo pode registrar um dispositivo que não está conectado ao sistema no momento. Quando este dispositivo é anexado, o Gestor do Windows enviará automaticamente a entrada bruta para a aplicação. Para obter a lista de dispositivos de entrada bruta no sistema, um aplicativo chama GetRawInputDeviceList. Usando o hDevice dessa chamada, um aplicativo chama GetRawInputDeviceInfo para obter as informações do dispositivo.

Através do membro dwFlags de RAWINPUTDEVICE, uma aplicação pode selecionar os dispositivos que deseja monitorizar e também aqueles que quer ignorar. Por exemplo, uma aplicação pode solicitar dados de todos os dispositivos de telefonia, exceto das secretárias eletrónicas. Para obter um código de exemplo, consulte Registrando-se parade entrada bruta .

Note que o rato e o teclado também são HIDs, portanto, os dados deles podem vir através de mensagens HID WM_INPUT e de mensagens tradicionais. Um aplicativo pode selecionar qualquer método pela seleção adequada de sinalizadores em RAWINPUTDEVICE.

Para obter o status de registro de um aplicativo, ligue GetRegisteredRawInputDevices a qualquer momento.

Leitura de entrada bruta

Uma aplicação recebe entrada bruta de qualquer HID cujo coleção de nível superior (TLC) corresponda a um TLC do registo. Quando um aplicativo recebe entrada bruta, sua fila de mensagens recebe uma mensagem WM_INPUT e o sinalizador de status da fila QS_RAWINPUT é definido (QS_INPUT também inclui esse sinalizador). Um aplicativo pode receber dados quando está em primeiro plano e quando está em segundo plano.

Há duas maneiras de ler os dados brutos: o método sem buffer ou método padrão, e o método com buffer. O método unbuffered obtém os dados brutos de uma estrutura RAWINPUT de cada vez e é adequado para muitos HIDs. Aqui, o aplicativo chama GetMessage para obter a mensagem WM_INPUT. Em seguida, o aplicativo chama GetRawInputData usando o identificador de RAWINPUT contido em WM_INPUT. Para obter um exemplo, consulte Fazendo uma leitura padrão de entrada bruta.

Em contraste, o método bufferizado obtém um array de estruturas RAWINPUT de de cada vez. Isso é fornecido para dispositivos que podem produzir grandes quantidades de entrada bruta. Nesse método, o aplicativo chama GetRawInputBuffer para obter uma matriz de estruturas RAWINPUT . Observe que a macro NEXTRAWINPUTBLOCK é usada para atravessar uma matriz de estruturas de RAWINPUT. Para obter um exemplo, consulte Fazendo uma leitura em buffer de entrada bruta.

Para interpretar a entrada bruta, são necessárias informações detalhadas sobre os HIDs. Um aplicativo obtém as informações do dispositivo chamando GetRawInputDeviceInfo com o identificador do dispositivo. Esse identificador pode vir de WM_INPUT ou do hDevice membro de RAWINPUTHEADER.

Ver também