• Publicidad

Número de teclas en el teclado

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Número de teclas en el teclado

Notapor BigBear » 2016-02-11 17:24 @767

Esto es parte de un capturador de teclas mio. El código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub capturar_teclas {
  2.     Win32::API->Import( "user32", "GetKeyState", "I", "I" );
  3.     $|++;
  4.     while (true) {
  5.         my %numeros_izquierda = (
  6.             48 => "0",
  7.             49 => "1",
  8.             50 => "2",
  9.             51 => "3",
  10.             52 => "4",
  11.             53 => "5",
  12.             54 => "6",
  13.             55 => "7",
  14.             56 => "8",
  15.             57 => "9"
  16.         );
  17.         my %numeros_derecha = (
  18.             96  => "0",
  19.             97  => "1",
  20.             98  => "2",
  21.             99  => "3",
  22.             100 => "4",
  23.             101 => "5",
  24.             102 => "6",
  25.             103 => "7",
  26.             104 => "8",
  27.             105 => "9"
  28.         );
  29.         %signos_shift = (
  30.             48  => ")",
  31.             49  => "!",
  32.             50  => "@",
  33.             51  => "#",
  34.             52  => "\$",    ##
  35.             53  => "%",
  36.             54  => "¨",
  37.             55  => "&",
  38.             56  => "*",
  39.             57  => "(",
  40.             187 => "+",
  41.             188 => "<",
  42.             189 => "_",
  43.             190 => ">",
  44.             191 => ":",
  45.             192 => "\"",    ##
  46.             193 => "?",
  47.             291 => "/\'",
  48.             220 => "}",
  49.             221 => "{",
  50.             222 => "^",
  51.             226 => "|"
  52.         );
  53.         my %teclas_raras = (
  54.             1    => "[click mouse]",
  55.             8    => "<br>[backspace]<br>",
  56.             13   => "<br>[enter]<br>",       #ENTER
  57.             "16" => "Shift",
  58.             32   => "<br>[space]<br>",
  59.             46   => "<br>[suprimir]<br>",
  60.             187  => "=",
  61.             188  => ",",
  62.             189  => "-",
  63.             190  => ".",
  64.             191  => ";",
  65.             192  => "\'",
  66.             193  => "/",
  67.             219  => "\\\'",
  68.             220  => "]",
  69.             221  => "[",
  70.             222  => "~",
  71.             226  => "\/"
  72.         );
  73.         capturar_ventanas();
  74.         unless ( GetKeyState(20) ne 0 ) {
  75.             $mayus = 32;
  76.         }
  77.         else {
  78.             $mayus = 0;
  79.         }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo que necesito saber es cómo consigo los números de todas las teclas de todo el teclado ya sea con shift o teclas normales. Me refiero a que "48" significa "0" y así. ¿ Alguien me podría orientar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Número de teclas en el teclado

Notapor explorer » 2016-02-11 17:48 @783

Según esta página de Micro$oft, esa función devuelve el valor ASCII de la tecla virtual.

Si es así... te sobran casi todas las líneas, ya que la conversión se puede hacer con las funciones chr() y ord().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Número de teclas en el teclado

Notapor BigBear » 2016-02-11 18:08 @797

Bien, explorer, ya encontré más información:

https://msdn.microsoft.com/es-es/librar ... 85%29.aspx
http://www.kbdedit.com/manual/low_level_vk_list.html

Lo que no encuentro es cuáles son los signos que se combinan con los shift. ¿Sabes cuáles serían?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Número de teclas en el teclado

Notapor explorer » 2016-02-12 13:21 @598

No entiendo la pregunta. Con la función GetKeyState() se obtiene el estado de las teclas, para ver si están pulsadas o no.

Si quieres saber si el usuario está pulsando la letra 'A' junto con la tecla de mayúsculas, pues entonces debes preguntar por el estado de las dos (siempre y cuando quieras usar esa función... hay otras).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Número de teclas en el teclado

Notapor BigBear » 2016-03-12 18:38 @818

Me refiero a detectar el número de la tecla que detecta GetAsyncKeyState. Estoy buscando un programa que me haga un mapa en el que presiono una tecla y me dice el número correspondiente a GetAsyncKeyState, por ejemplo si presiono "a" me tiene que devolver 65, las teclas básicas las conozco, pero los signos con la tecla de mayúsculas, no. Probé con el programa que te mostré en el enlace anterior pero nada que ver: me dice que la "a" es 61 cuando es 65.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Número de teclas en el teclado

Notapor explorer » 2016-03-12 20:47 @908

GetAsyncKeyState() devuelve si la tecla indicada está pulsada o no y si la tecla fue pulsada a partir de la última llamada a esta función.

El código de la tecla que se le pasa como argumento debe corresponder con el código de la tecla virtual, que en su mayor parte coincide con el código ASCII de la tecla.

Por ejemplo, para saber si la tecla 'z' está pulsada, usamos:

if(GetAsyncKeyState('Z'))
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Número de teclas en el teclado

Notapor BigBear » 2016-03-14 09:42 @446

Listo, ya conseguí todo. Gracias, explorer. Solo me falta la tecla que dice ". Supr" en la parte derecha del teclado que no la encuentro por ningún lado a su ASCII.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Número de teclas en el teclado

Notapor explorer » 2016-03-14 16:25 @725

Es VK_DELETE.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Número de teclas en el teclado

Notapor BigBear » 2016-03-14 20:45 @906

No ,esa ya la tengo registrada , me refiero mas a la derecha :D , al costado , al lado de la tecla enter de la derecha.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Número de teclas en el teclado

Notapor explorer » 2016-03-15 00:06 @046

Pues será VK_OEM_PERIOD.

Recuerda que no es lo mismo un teclado físico que una relación de teclas virtuales.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron