Duda Obtener código hexadecimal por pulsación de teclado / RESUELTO

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Hola foreros!! Vengo esta vez con una pregunta para nota, de esas de, como diría El Gañán, de tener estudios. biggrin

Estoy cacharreando con algo y necesito saber qué código hexadecimal obtengo con una pulsación de teclado... y me estoy volviendo loco. :( Las teclas que necesito con necesidad, valga la "rebuznancia" :LOL: son el cero numérico, intro (que no retorno) y asterisco numérico. Al principio creía que iba a ser sencillo, buscar una plantilla por internet de la imagen de un teclado, proceder, probar y liarme con un prototipo :LOL: pero me va a j*der el invento. :( En cuanto a coger precisamente el cero numérico, el intro y no retorno y el asterisco numérico es por necesidad, porque no es la misma función el cero numérico que el cero alfabético, ni es la misma función el intro que el retorno. :guiño:

Según me ha parecido ver por ahí varias veces, parece ser que el cero numérico es el 0x52, pero encuentro varias distribuciones y no sé ya de cuál fiarme. He probado todas y no funciona. Funcionar, funciona, pero me devuelve un paréntesis, una R, una L y como me descuide, me devuelve un microondas. :descojon:

¿Podéis echarme una mano a averiguar qué código hexadecimal representa a cada tecla de un teclado completo? :guiño:


Saludos!!
 

Alvaris

Clan Leader
Moderador
Miembro del Club
Registrado
4 Ene 2007
Mensajes
41.208
Reacciones
57.596
para qué querrás eso... :descojon::descojon::descojon::descojon::descojon::descojon:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
para qué querrás eso... :descojon::descojon::descojon::descojon::descojon::descojon:

biggrin Quiero, o quería hacerme una consola de mandos para usarla con un programa y así poder tener una botonera básica pero con funciones avanzadas, al poder presionar mayúsculas y hacer combinaciones. :guiño:
 

MiguelX5

En Practicas
Registrado
8 Feb 2017
Mensajes
242
Reacciones
148
Cuando dices que te devuelve un "parentesis" una "L" etc... quiere decir que no siempre te devuelve el mismo caracter? entiendo que lo estas mostrando recogiendo el valor en una variable e imprimiendola por pantalla, es decir, con código no?

Si el valor que te devuelve es siempre el mismo, simplemente sería mapearlo tan cual en el código no haría falta saber su hexadecimal.

Depende de como estés montando el aparato claro.
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Cuando dices que te devuelve un "parentesis" una "L" etc... quiere decir que no siempre te devuelve el mismo caracter? entiendo que lo estas mostrando recogiendo el valor en una variable e imprimiendola por pantalla, es decir, con código no?

Si el valor que te devuelve es siempre el mismo, simplemente sería mapearlo tan cual en el código no haría falta saber su hexadecimal.

Depende de como estés montando el aparato claro.

No, siempre manda el mismo. Si se supone que es un intro, con algún código manda un paréntesis, con otro código una L mayúscula, con otro una P minúscula y así hasta aquí, que no logro identificarlo. Lo que hago es generar una pulsación de teclado a través del código hexadecimal que corresponde a esa tecla, pero no lo encuentro y preguntaba por alguna forma para averiguarlo, una aplicación cutre que te devuelva qué hexadecimal está usando. No me sirve el ASCII, solo el hexadecimal o el decimal. :guiño:

Puedo mandar la letra directamente como pulsación o el número, pero si le digo que mande un cero, manda un cero alfabético y no un cero decimal. Si fuese por pijerío, pues podría callarme :LOL: pero en dicho programa, la función que quiero usar está en el cero decimal y no en el alfabético. Lo mismo pasa con intro y retorno y el asterisco, que el asterisco no es el mismo el del teclado numérico que el del alfabético. Por eso necesito estos códigos, porque no es por el caracter que pulsas, sino por la TECLA concreta que pulsas. :guiño:
 

MiguelX5

En Practicas
Registrado
8 Feb 2017
Mensajes
242
Reacciones
148
Si si, entiendo el problema, por eso te preguntaba como lo muestras, en que lenguaje lo estas haciendo? me da que estás recogiendo el código hexadecimal en una variable de otro tipo y al hacer la "transformación" te muestra caracteres extraños.

Busca para el lenguaje que estes usando el cómo tratar codigos hexadecimales seguramente habrá ejemplos y así te mostrará lo que buscas. Tanto para mostrar en hexadecimal el caracter real pulsado como para transformar o enviar caracteres hexadecimales de forma precisa.

Si estuvieras trabajando en C algo como esto te podría orientar
https://www.includehelp.com/c/working-with-hexadecimal-values-in-c-programming-language.aspx
 

pasko

Forista Senior
Modelo
F45 - K54
Registrado
21 Sep 2017
Mensajes
4.203
Reacciones
10.200
Hola.

¿Se trata de un teclado de ordenador (letras+números+funciones) o de un teclado de teléfono (0..9,*#)?
¿Cómo estás leyendo los datos que te da el teclado?

Saludos.
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Si si, entiendo el problema, por eso te preguntaba como lo muestras, en que lenguaje lo estas haciendo? me da que estás recogiendo el código hexadecimal en una variable de otro tipo y al hacer la "transformación" te muestra caracteres extraños.

Busca para el lenguaje que estes usando el cómo tratar codigos hexadecimales seguramente habrá ejemplos y así te mostrará lo que buscas. Tanto para mostrar en hexadecimal el caracter real pulsado como para transformar o enviar caracteres hexadecimales de forma precisa.

Si estuvieras trabajando en C algo como esto te podría orientar
https://www.includehelp.com/c/working-with-hexadecimal-values-in-c-programming-language.aspx

Estoy en C y la línea de código es la siguiente:

Código:
Keyboard.press (0x52);

Puedes sustituir el 0x52 por '0' y te muestra un cero, pero no es el cero que necesito. :LOL: Si mal no recuerdo, ese cero es el 0x30, que es la tecla superior a la P, y no me sirve. Tal y como es el código, como puedes ver, no necesito "interpretar" el hexadecimal, porque se lo metes y él se lo gestiona, pero no quiere coger estas teclas, o es que estas teclas tienen otros hexadecimales que no son esos y me estoy volviendo gilipollas. :LOL:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Hola.

¿Se trata de un teclado de ordenador (letras+números+funciones) o de un teclado de teléfono (0..9,*#)?
¿Cómo estás leyendo los datos que te da el teclado?

Saludos.

Sí, de un teclado completo con teclado numérico. Las pulsaciones, aunque algunas requieren de modificadores como control, esto no es un problema, sino dar, y nunca mejor dicho, "con la tecla correcta". :LOL: Estoy "viendo" el hexadecimal de plantillas que hay por internet, pero ninguna me ha funcionado. Aquí un ejemplo de plantilla, una de las tantas que he consultado:

US_PC_keyboard_keycodes.png

En este caso, el código que marca es el 0x64, y ese tampoco eso, y tampoco funciona el 0x24 para el asterisco ni el 0x5B para el intro. :metra:
 

pasko

Forista Senior
Modelo
F45 - K54
Registrado
21 Sep 2017
Mensajes
4.203
Reacciones
10.200
Estoy en C y la línea de código es la siguiente:

Código:
Keyboard.press (0x52);

Puedes sustituir el 0x52 por '0' y te muestra un cero, pero no es el cero que necesito. :LOL: Si mal no recuerdo, ese cero es el 0x30, que es la tecla superior a la P, y no me sirve. Tal y como es el código, como puedes ver, no necesito "interpretar" el hexadecimal, porque se lo metes y él se lo gestiona, pero no quiere coger estas teclas, o es que estas teclas tienen otros hexadecimales que no son esos y me estoy volviendo gilipollas. :LOL:

Hola.
Creo que no te sigo.... no me suena la función que utilizas en tu ejemplo: ¿Qué versión de lenguaje C utilizas y qué sistema operativo?
La plantilla de teclado que pones como ejemplo parece más bien una lista ordenada de teclas.

También podrías mostrar los códigos que te salen haciendo una prueba de las teclas que te interesan (independientemente de lo que digan las plantillas :)) y luego usarlos directamente. Por ejemplo, si el asterisco de la derecha te da un código 0xff.... pues utiliza ese código.:guiño:
Saludos.
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Hola.
Creo que no te sigo.... no me suena la función que utilizas en tu ejemplo: ¿Qué versión de lenguaje C utilizas y qué sistema operativo?
La plantilla de teclado que pones como ejemplo parece más bien una lista ordenada de teclas.

También podrías mostrar los códigos que te salen haciendo una prueba de las teclas que te interesan (independientemente de lo que digan las plantillas :)) y luego usarlos directamente. Por ejemplo, si el asterisco de la derecha te da un código 0xff.... pues utiliza ese código.:guiño:
Saludos.

Eso es lo que llevo preguntando desde el inicio del hilo, cómo obtener ese código hexadecimal para usarlo directamente. :LOL:

El comando no se puede usar si no se incluye librería, que quedaría, a modo de ejemplo rápido, de la siguiente manera, omitiendo líneas que no son relevantes:

Código:
#include <Keyboard.h> //Incluye librería del teclado

Keyboard.begin();  //Inicia el módulo del teclado

Keyboard.press (0x52); //Presiona la tecla 0x52 HEX

La versión de C no la sé y el sistema operativo es indiferente, porque da las mismas pulsaciones en Windows y en Mac. :guiño:
 

pasko

Forista Senior
Modelo
F45 - K54
Registrado
21 Sep 2017
Mensajes
4.203
Reacciones
10.200
Hola.
Ya lo pillo. Prueba con getchar()
Saludos.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.082
Reacciones
4.082
Qué librería es esa de Keyboard.h?

Quizá como te dicen no funciona como debería o el valor que pasas no es con el formato correcto.

Con la información de la librería se podría saber como funciona.

Un saludo :guiño:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Hola.
Ya lo pillo. Prueba con getchar()
Saludos.

Pues sí, sí reconoce el getchar(), aparece en naranja cuando lo escribes!! Ahora el tema es saber cómo usarlo y qué devuelve, porque no veo instrucciones de ese comando. :LOL:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Qué librería es esa de Keyboard.h?

Quizá como te dicen no funciona como debería o el valor que pasas no es con el formato correcto.

Con la información de la librería se podría saber como funciona.

Un saludo :guiño:

La predefinida. Esta mañana, en el descanso, he leído que posiblemente esa librería, aunque venga por defecto, esté limitada y he encontrado un enlace a GitHub donde parece ser que hay una librería mejorada. Me tocará ahora investigar. :guiño:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Creo que esos códigos de teclas varian en función del sistema operativo donde corre el programa. Ejemplo de Windows: https://msdn.microsoft.com/es-es/library/windows/desktop/dd375731(v=vs.85).aspx

Más datos que te pueden ayudar: https://stackoverflow.com/questions/3202629/where-can-i-find-a-list-of-mac-virtual-key-codes

Pedazo de listado!! :amo2: Muchas gracias, y creo que el 0x60 no le había probado. :LOL: Esperaré a cuando pueda ir donde tengo el PC portátil para hacer pruebas porque aquí estoy con Mac. :guiño:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Pues ya he probado el cero numérico y sale el º, así que tampoco me sirve. Y estoy en Windows 7, así que tampoco me funciona. :(
 

SPTR

Forista Legendario
Moderador
Miembro del Club
Registrado
18 Ago 2005
Mensajes
9.209
Reacciones
860
Dices que si lo pones 0 escrito hace el 0 alfanumérico, porque no buscas una tabla ascii, y lo haces con ALT+código ascii..., igual así te lo escribe como un string pero el adecuado. No sé, ni p*ta idea men.
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Dices que si lo pones 0 escrito hace el 0 alfanumérico, porque no buscas una tabla ascii, y lo haces con ALT+código ascii..., igual así te lo escribe como un string pero el adecuado. No sé, ni p*ta idea men.

Esa es la primera opción que barajé y no acepta códigos con alternativa. De todas formas, aunque en el título no lo ponga, he conseguido resolverlo esta noche, por lo que luego lo cambiaré. Finalmente encontré otra librería compatibke con la Keyboard.h y ya funciona con más funciones que la original. :guiño:
 

McClane

Moderador Informática
Moderador
Miembro del Club
Modelo
2 E30, 1 E39
Registrado
20 Jul 2006
Mensajes
44.349
Reacciones
24.243
Pues como digo, al final conseguí resolverlo. Al parecer la librería de origen tiene limitadas las teclas y las teclas de avance de página, retroceso, inicio, fin, etc y demás, sí funcionan, pero no el teclado numérico. Con otra librería consigo hacer funcionar TODO el teclado sin problemas y las primeras pruebas ya han salido bien paradas, por lo que ahora toca hacer un prototipo a ver si funciona. :LOL: La librería permite hasta "crear" un ratón y funciona incluso en BIOS, cosa que la de origen no lo hace. :guiño:
http://www.kadevice.net/forum/viewtopic.php?t=428

Toma eso otro, que te mueves menos que una peonza en un cajón.

Si eso me devuelve lo que ya había probado varias veces!! :LOL:
 

SPTR

Forista Legendario
Moderador
Miembro del Club
Registrado
18 Ago 2005
Mensajes
9.209
Reacciones
860
Vaya, pensaba que yo era la solución y lo único que hice es comerme un mojón

Bueno, de todo se aprende.
Que estarás haciendo por ahí mcclen.

Yo me he convertido mi taladro de NiCD o mh no me acuerdo a litio con unas batt viejas de portátil y ahora necesito fabricar un medidor de carga con un amplificador operacional, un zener y unos divisores resistivos para ver cómo va la carga.

Eso seguro que a tu te mola

Tienes más peligro que Murdock en una central nuclear.
 
Arriba