c# winapi keyboard hardware hook

c# - Teclados mĂșltiples y ganchos de bajo nivel



winapi keyboard (4)

Tengo un sistema en el que tengo varios teclados y realmente necesito saber de qué teclado proviene el trazo clave. Para explicar la configuración:

  1. Tengo un PC normal y un teclado USB
  2. Tengo una pantalla VGA externa con algunas teclas duras
  3. Las teclas duras se asignan como un teclado USB estándar, que envía una cantidad limitada de códigos de tecla (F1, F2, Retorno, + y -)

Tengo un gancho de bajo nivel (en C # pero en realidad recurro a la funcionalidad de Win32) que es capaz de manejar la entrada incluso cuando mi aplicación no está enfocada.

El problema es que cuando se usa el teclado normal, algunos de los códigos de teclas asignados son captados por la aplicación que se maneja en la pantalla externa. Una de las pulsaciones de teclas enviadas por la pantalla externa y utilizada para la confirmación es VK_RETURN. A menos que pueda identificar el "dispositivo" y filtrarlo, el usuario podría realizar acciones y confirmarlas en una pantalla que ni siquiera está mirando.

¿Cómo sé qué teclado fue el responsable de la pulsación de teclas?



No hay manera de hacer esto. Windows resuelve esto por ti. Como se mencionó, necesita escribir / modificar un controlador de dispositivo.


Sí, permanezco corregido, mi mal, aprendiendo algo nuevo todos los días.

Aquí está mi intento de compensarlo :):

  • Registre los dispositivos que desea utilizar para la entrada sin procesar (los dos teclados) con :: RegisterRawInputDevices ().

  • Puede obtener estos dispositivos de GetRawInputDeviceList ()

  • Después de que haya registrado sus dispositivos, comenzará a recibir mensajes WM_INPUT.

  • El lParam del mensaje WM_INPUT contiene una estructura RAWKEYBOARD que puede usar para determinar el teclado de donde proviene la entrada, más el código de tecla virtual y el tipo de mensaje (WM_KEYDOWN, WM_KEYUP, ...)

  • Por lo tanto, puede establecer un indicador de dónde vino el último mensaje y luego enviarlo a los controladores de entrada de teclado normales.