Foros del Web » Programación para mayores de 30 ;) » .NET »

Convertir código de tecla a nombre de tecla

Estas en el tema de Convertir código de tecla a nombre de tecla en el foro de .NET en Foros del Web. Hola, estoy haciendo un programa en el que se pueden personalizar sus atajos de teclado, de modo que debo tener una pantalla en la que ...
  #1 (permalink)  
Antiguo 09/11/2015, 05:40
 
Fecha de Ingreso: noviembre-2009
Mensajes: 67
Antigüedad: 14 años, 5 meses
Puntos: 2
Convertir código de tecla a nombre de tecla

Hola, estoy haciendo un programa en el que se pueden personalizar sus atajos de teclado, de modo que debo tener una pantalla en la que salga la función, y la tecla asignada.

Del modo en que lo tengo montado ahora, por ejemplo la tecla Enter aparece representada como 13, pero necesito que en su lugar aparezca la palabra Enter, y así con las demás teclas.

¿Alguna idea?
  #2 (permalink)  
Antiguo 09/11/2015, 07:52
 
Fecha de Ingreso: mayo-2015
Ubicación: Nicaragua, Diriamba
Mensajes: 48
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Convertir código de tecla a nombre de tecla

Hola

Podrias darnos mas detalles, por ejemplo en que momento le aparece el 13(Enter) como lo estas mandando a cargar? ademas que lenguaje estas usando?
  #3 (permalink)  
Antiguo 09/11/2015, 10:35
 
Fecha de Ingreso: noviembre-2009
Mensajes: 67
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Convertir código de tecla a nombre de tecla

Cierto, información muy importante. Visual Basic .NET Framework 4.0, aplicación de Windows Forms.

Así es como guardo la tecla:

My.Settings.Startkey = Keys.Enter

Y así es como recupero el valor de esa variable y lo muestro como texto de un botón:

ButtonStart.Text = My.Settings.Startkey

Y entonces el texto del botón es 13, y me gustaría que convirtiera ese 13 al nombre de la tecla, es decir, Enter.

El propósito del botón sería hacerle clic, que la aplicación "escuche" qué tecla pulsa el usuario a continuación, y asignar esa tecla como nuevo atajo de teclado. Pero eso ya es otro tema.
  #4 (permalink)  
Antiguo 09/11/2015, 12:21
 
Fecha de Ingreso: mayo-2015
Ubicación: Nicaragua, Diriamba
Mensajes: 48
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Convertir código de tecla a nombre de tecla

Pues bien para serte sincero la solucion que se me ocurre en este caso seria que te crearas una tabla en un bd o ya sea una clase en tu codigo donde dejes el valor de cada tecla, creo que es mas sencillo que te crees una clase, hice esta y pues funciona para lo que quieres:

Código Visual Basic:
Ver original
  1. Public Class KeyCodeToString
  2.     Private newPropertyValue(20) As String
  3.     Public Property NewProperty(ByVal idx As Integer) As String
  4.         Get
  5.             Return newPropertyValue(idx)
  6.         End Get
  7.         Set(ByVal value As String)
  8.             newPropertyValue(idx) = value
  9.         End Set
  10.     End Property
  11.  
  12.     Public Sub Inicilizar()
  13.         Me.NewProperty(0) = "prueba 0"
  14.         Me.NewProperty(1) = "Prueba 1"
  15.         Me.NewProperty(13) = "Enter"
  16.     End Sub
  17. End Class

Llena la clase en el sub Inicializar con la tabla de constantes de teclas de microsoft https://msdn.microsoft.com/en-us/lib...=vs.60%29.aspx
Luego cuando vayas a recuperar el valor de la variable entonces te creas una instancia de la clase que hicimos y la inicializas algo como lo siguientes

Código Visual Basic:
Ver original
  1. Dim Teclas As New KeyCodeToString
  2.         Teclas.Inicilizar()
  3. ButtonStart.Text = Teclas.NewProperty(My.Settings.Startkey)

Y listo ya tendiras el resultado segun el Startkey (en numero entero) que le envies a la clase ella te regresaria el que le asignes en su propiedad, por ejmplo si te fijas yo deje en la posicion 13 la palabra Enter entonces si Startkey es 13 la clase te regresara la palabra enter

Te agradeceria que nos comentaras como te fue

Cualquier duda o pregunta estamos a la orden

Última edición por Gerard93; 09/11/2015 a las 13:38
  #5 (permalink)  
Antiguo 10/11/2015, 02:42
 
Fecha de Ingreso: noviembre-2009
Mensajes: 67
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Convertir código de tecla a nombre de tecla

Gracias, pero me temo que no va a poder ser tan fácil.

Prueba este código:

Código Visual Basic .NET:
Ver original
  1. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
  2. MsgBox("Has pulsado la tecla " & e.KeyCode.ToString & " con KeyCode " & e.KeyCode & ".")
  3. End Sub

La tecla ç por ejemplo, que según Windows se llama OemQuestion, es la tecla con KeyCode 191, y esa lista de la página de Microsoft tan sólo llega al 127. ¡Y a saber cuántos más existen!

¿Y qué pasará con las demás distribuciones de teclado? ¿cada KeyCode será una tecla diferente según el idioma del teclado? ¿o habrá cientos de KeyCode en total para los cientos de teclas diferentes que deben haber sumando las teclas de todos los tipos de teclado que existan?

Ya que el nombre de la tecla que ha sido pulsada en un evento KeyDown se obtiene con e.KeyCode.ToString, he pensado que cuando el usuario pulse una nueva tecla para el atajo de teclado, se guarde en My.Settings el nombre de tecla junto con el KeyCode. Y así utilizar internamente el KeyCode, pero mostrar en la interfaz el nombre de tecla. Pero tampoco es una solución perfecta, ya que requiere que yo guarde de antemano el nombre de cada tecla, y a saber cuántos problemas más.

Lo idóneo sería una conversión real por parte de Windows.

¿Tal vez un código para simular una pulsación del teclado utilizando un KeyCode, y así obtener el nombre de esa tecla con el e.KeyCode.ToString? sería otra solución poco elegante pero podría funcionar. Investigaré a ver qué tal.

Última edición por vistaero; 10/11/2015 a las 02:48
  #6 (permalink)  
Antiguo 10/11/2015, 08:18
 
Fecha de Ingreso: mayo-2015
Ubicación: Nicaragua, Diriamba
Mensajes: 48
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Convertir código de tecla a nombre de tecla

Hola vistaero

Como bien dice la pagina que te comparti son "Constants" ...constantes nunca cambian no importa el teclado que uses siempre tendran el mismo valor ahora bien tienes razon no aparecen todos, porque es una lista de constantes probablemente las demas no sean constantes pero la verdad a mi me parece una lista bien completa para atajos tienes todo el abcedario y las tecla de funciones....etc las mas usadas para atajos no conozcon algun atajo con la letra "ç" pues son simboles especiales para idiomas, la cedilla (ç) que es la que pones como ejemplo es para cambiar la pronunciacion de la c en otros idiomas por lo tanto ni siquiera es una letra es un simbolo, si te pones a eso tendrias que revisar tambien todas las letras con acentos, es cierto que lo mejor seria una conversion por parte de windows pero no conozco si realemente existe alguna, se que puedes obtener el caracter correspondiente de un KeyCode con Chrw(keyCode) eso te devuelve el caracter correspondiente de la tecla pero quedarias en la misma.

Si optas por guardar el keycode junto a su string(nombre) te tengo dos observaciones
1-No lo guardes en tu archivo de configuracion en ese archivo solo deben ir configuraciones, deberias usar una bd
2-Te enfrentarias al mismo problema de que si lo que guardaste no es una letra constante tambien diferiria por teclado e idioma

Pero ciertamente seria interesante poder programar alguna clase que realizes lo que deseas (eso si te recuerdo que todo sistema tiene limitaciones aun Windows)si el tiempo me lo permite tambien buscare como hacerlo.

Etiquetas: nombre, tecla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.