2008-09-18 12 views
12

Tengo un sistema en el que tengo varios teclados y realmente necesito saber de qué teclado proviene el golpe de tecla. Para explicar la puesta en marcha:Teclados múltiples y ganchos de bajo nivel

  1. tengo un teclado de PC normal y USB
  2. tengo una pantalla VGA externo con algunas teclas duras
  3. Las claves duro se asignan como un teclado USB estándar, el envío de una número limitado de códigos de teclado (F1, F2, Retorno + y -)

tengo un gancho de bajo nivel (en C#, pero en realidad pidiendo a Win32 funcionalidad) que es capaz de hacer frente a 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 captados por la aplicación que se está ejecutando 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?

+0

he respondido a esta pregunta aquí: [Cómo detectar si el dispositivo de entrada del ratón y touchpad están habilitados] (http://stackoverflow.com/a/8804862/1000282). La respuesta usa una biblioteca c y controladores que he creado. –

+0

No es estrictamente una respuesta a mi pregunta. La respuesta marcada como correcta ha funcionado bien durante varios años. –

+0

@ ray-haves ¿Puede confirmar si puede evitar la entrada de _making_ para otras aplicaciones incluso después de haberla filtrado? Es decir, una vez que una pulsación de tecla se filtra a través de la entrada sin procesar, ¿puede evitar que el resto del sistema operativo la procese? –

Respuesta

14

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

Aquí está mi intento de hacer para él :):

  • registrar 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 se haya registrado sus dispositivos, usted comienza a recibir mensajes WM_INPUT.

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

  • Para que pueda establecer un indicador de dónde vino el último mensaje y luego enviarlo a los controladores de entrada de teclado normal.

+0

Tengo un problema similar ahora que necesito obtener múltiples eventos táctiles. ¿tienes un ejemplo más detallado? – user1865027

-3

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

+0

Oh, bueno, eso es una pena. Voy a ponerme en contacto con los fabricantes de dispositivos y ver si hay alguna forma de actualizar el hardware para usar códigos de clave diferentes (con suerte en los números altos de VK_Fn). –

+1

No aceptar esto, ya que parece que es posible sin un controlador basado en la respuesta de A Nony Mouse. –

Cuestiones relacionadas