Pregunta

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

  1. Tengo una PC normal y un teclado USB.
  2. Tengo una pantalla VGA externa con algunas teclas físicas.
  3. Las teclas físicas están asignadas como un teclado USB estándar y envían un número limitado de códigos de teclas (F1, F2, Retorno, + y -).

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

El problema es que cuando se utiliza el teclado normal, algunos de los códigos de teclas asignados son recogidos por la aplicación 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 estar realizando acciones y confirmándolas en una pantalla que ni siquiera mira.

¿Cómo sé qué teclado fue responsable de presionar la tecla?

¿Fue útil?

Solución

Sí, me corrijo, mi mal, aprendiendo algo nuevo cada día.

Aquí está mi intento de compensarlo :) :

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

  • Puede obtener estos dispositivos desde GetRawInputDeviceList()

  • Una vez 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 vino la entrada, además del código clave virtual y el tipo de mensaje (WM_KEYDOWN, WM_KEYUP, ...)

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

Otros consejos

No hay forma de hacer esto.Windows resume esto por usted.Como se mencionó, necesita escribir/modificar un controlador de dispositivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top