Introducción a la entrada sin procesar

Hay muchos dispositivos de entrada de usuario junto al teclado y el mouse tradicionales. Por ejemplo, la entrada del usuario puede provenir de un joystick, una pantalla táctil, un micrófono u otros dispositivos que permitan una gran flexibilidad en la entrada del usuario. Estos dispositivos se conocen colectivamente como dispositivos de interfaz humana (HID). La API de entrada sin procesar proporciona una manera estable y sólida de que las aplicaciones acepten la entrada sin procesar de cualquier HID, incluido el teclado y el mouse.

En esta sección se describen los temas siguientes:

Modelo de entrada sin procesar

Anteriormente, el teclado y el mouse normalmente generaban datos de entrada. El sistema interpretó los datos procedentes de estos dispositivos de forma que eliminara los detalles específicos del dispositivo de la información sin procesar. Por ejemplo, el teclado genera el código de examen específico del dispositivo, pero el sistema proporciona una aplicación con el código de clave virtual. Además de ocultar los detalles de la entrada sin procesar, el administrador de ventanas no admitía todos los HID nuevos. Para obtener la entrada de los HID no admitidos, una aplicación tenía que hacer muchas cosas: abrir el dispositivo, administrar el modo compartido, leer periódicamente el dispositivo o configurar el puerto de finalización de E/S, etc. El modelo de entrada sin procesar y las API asociadas se desarrollaron para permitir un acceso sencillo a la entrada sin procesar desde todos los dispositivos de entrada, incluido el teclado y el mouse.

El modelo de entrada sin procesar es diferente del modelo de entrada original de Windows para el teclado y el mouse. En el modelo de entrada original, una aplicación recibe entradas independientes del dispositivo en forma de mensajes enviados o publicados en sus ventanas, como WM_CHAR, WM_MOUSEMOVE y WM_APPCOMMAND. Por el contrario, para la entrada sin procesar, una aplicación debe registrar los dispositivos de los que desea obtener datos. Además, la aplicación obtiene la entrada sin procesar a través del mensaje WM_INPUT .

Hay varias ventajas para el modelo de entrada sin procesar:

  • Una aplicación no tiene que detectar ni abrir el dispositivo de entrada.
  • Una aplicación obtiene los datos directamente del dispositivo y procesa los datos para sus necesidades.
  • Una aplicación puede distinguir el origen de la entrada aunque sea del mismo tipo de dispositivo. Por ejemplo, dos dispositivos de mouse.
  • Una aplicación administra el tráfico de datos especificando datos de una colección de dispositivos o solo tipos de dispositivo específicos.
  • Los dispositivos HID se pueden usar a medida que están disponibles en Marketplace, sin esperar a que los nuevos tipos de mensajes o un sistema operativo actualizado tengan nuevos comandos en WM_APPCOMMAND.

Tenga en cuenta que WM_APPCOMMAND proporciona algunos dispositivos HID. Sin embargo, WM_APPCOMMAND es un evento de entrada independiente del dispositivo de nivel superior, mientras que WM_INPUT envía datos sin procesar y de bajo nivel que son específicos de un dispositivo.

Registro de entrada sin procesar

De forma predeterminada, ninguna aplicación recibe entradas sin procesar. Para recibir la entrada sin procesar de un dispositivo, una aplicación debe registrar el dispositivo.

Para registrar dispositivos, una aplicación crea primero una matriz de estructuras RAWINPUTDEVICE que especifican la colección de nivel superior (TLC) para los dispositivos que desea. El TLC se define mediante una página de uso (la clase del dispositivo) y un identificador de uso (el dispositivo dentro de la clase ). Por ejemplo, para obtener el TLC del teclado, establezca UsagePage = 0x01 y UsageID = 0x06. La aplicación llama a RegisterRawInputDevices para registrar los dispositivos.

Tenga en cuenta que una aplicación puede registrar un dispositivo que no está conectado actualmente al sistema. Cuando se conecte este dispositivo, el Administrador de Windows enviará automáticamente la entrada sin procesar a la aplicación. Para obtener la lista de dispositivos de entrada sin procesar en el sistema, una aplicación llama a GetRawInputDeviceList. Con hDevice desde esta llamada, una aplicación llama a GetRawInputDeviceInfo para obtener la información del dispositivo.

A través del miembro dwFlags de RAWINPUTDEVICE, una aplicación puede seleccionar los dispositivos a los que escuchar y también aquellos a los que quiere omitir. Por ejemplo, una aplicación puede solicitar la entrada de todos los dispositivos de telefonía, excepto las máquinas de respuesta. Para obtener código de ejemplo, consulte Registro de entrada sin procesar.

Tenga en cuenta que el mouse y el teclado también son HID, por lo que los datos de ellos pueden pasar tanto a través del mensaje HID WM_INPUT como de los mensajes tradicionales. Una aplicación puede seleccionar cualquiera de los métodos mediante la selección adecuada de marcas en RAWINPUTDEVICE.

Para obtener el estado de registro de una aplicación, llame a GetRegisteredRawInputDevices en cualquier momento.

Lectura de la entrada sin procesar

Una aplicación recibe una entrada sin procesar de cualquier HID cuya colección de nivel superior (TLC) coincide con un TLC del registro. Cuando una aplicación recibe una entrada sin procesar, su cola de mensajes obtiene un mensaje WM_INPUT y se establece la marca de estado de la cola QS_RAWINPUT (QS_INPUT también incluye esta marca). Una aplicación puede recibir datos cuando se encuentra en primer plano y cuando está en segundo plano.

Hay dos maneras de leer los datos sin procesar: el método sin búfer (o estándar) y el método almacenado en búfer. El método sin búfer obtiene los datos sin procesar una estructura RAWINPUT a la vez y es adecuada para muchos HID. Aquí, la aplicación llama a GetMessage para obtener el mensaje WM_INPUT . A continuación, la aplicación llama a GetRawInputData mediante el identificador RAWINPUT contenido en WM_INPUT. Para obtener un ejemplo, vea Hacer una lectura estándar de la entrada sin procesar.

En cambio, el método almacenado en búfer obtiene una matriz de estructuras RAWINPUT a la vez. Esto se proporciona para dispositivos que pueden producir grandes cantidades de entrada sin procesar. En este método, la aplicación llama a GetRawInputBuffer para obtener una matriz de estructuras RAWINPUT . Tenga en cuenta que la macro NEXTRAWINPUTBLOCK se usa para atravesar una matriz de estructuras RAWINPUT . Para obtener un ejemplo, vea Hacer una lectura almacenada en búfer de entrada sin procesar.

Para interpretar la entrada sin procesar, se requiere información detallada sobre los HID. Una aplicación obtiene la información del dispositivo llamando a GetRawInputDeviceInfo con el identificador del dispositivo. Este identificador puede provenir de WM_INPUT o del miembro hDevice de RAWINPUTHEADER.

Consulte también