teclas - teclado desconfigurado windows 7 letras numeros
¿Cómo determinar si se presiona cierta tecla, sabiendo solo su posición en los teclados de EE. UU.? (2)
Considere que, para un videojuego de Windows, necesito determinar si se ha presionado la tecla que genera los caracteres `y ~ en el diseño del teclado en inglés de EE. UU. (Que generalmente está debajo de la tecla Escape y se deja en 1). Esto puede sonar como una pregunta trivial, pero no me parece una.
Cuando Windows envía mensajes de teclado, especifica el código de clave virtual y el código de exploración OEM. No podemos confiar en el código de exploración OEM porque "el valor depende del OEM", y tampoco podemos depender del código de tecla virtual, ya que depende del diseño del teclado activo actualmente.
Nuestra "solución" actual es usar LoadKeyboardLayout
y MapVirtualKeyEx
para encontrar el código de escaneado OEM de la clave que genera el carácter `en el diseño del teclado en inglés de EE. UU., Luego simplemente escuche el código de escaneo OEM. El problema es que esto no funciona si el usuario no tiene instalado el diseño en inglés de EE. UU.
¿Hay una manera real de hacer esto en Windows?
Ate la acción del juego al personaje, no la posición de la tecla. De lo contrario, ¿cómo le dices al usuario qué tecla presionar? "debajo de la tecla de escape"? Puede que no tengan nada allí, pero si les dice "la tecla ^", pueden buscarlo.
Probablemente también desee que sea configurable para acomodar exóticos diseños de teclado y preferencias de usuario.
El código de escaneo OEM no cambia de teclado a teclado. No hay razón para no usarlo.
De vuelta en los días del DOS, se han utilizado los mismos códigos de exploración para los juegos porque ha sido la única forma de detectar eventos de activación y desactivación. Nadie tuvo problemas con eso y dudo que cambie en el futuro.
Si desea otra opción, puede probar DirectInput-API. También le proporciona los códigos de escaneo sin procesar y, si no me equivoco, también puede consultar la posición física, la dimensión y las características de cada tecla.