none
Asignar Atajo de Teclado a nivel Windows- Vb.Net RRS feed

  • Pregunta

  • Hola.

    Estoy desarrollando un programa y me gustaría agregarle como una nueva funcionalidad que el usuario pudiera definir un atajo de teclado que funcione aunque esté en otro programa, pero no sé como hacerlo.

    Osea, el usuario podría definir si quiere , por ejemplo, <mostrar un formulario>, presionando la tecla por ejemplo <F12> o <Win+F9> o definir su propio atajo, aunque esté en otro programa o estén todos minimizados, en teoría sería como un atajo universal de teclado como Win+R, que funciona aunque el usuario esté en cualquier programa.

    Si me pueden ayudar con algún ejemplo, código, artículo o algo, que sea dirigido a Vb.Net o a C#(para traducir), WinForms, muchísimas gracias.

    ------------------------

    'Esto es lo que pude solucionar hasta ahora (16:30pm)
    
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
            Dim modifiers As Keys = (keyData And Keys.Modifiers)
            Dim key As Keys = (keyData And Keys.KeyCode)
            If (modifiers.Equals(Keys.Control Or Keys.Alt)) AndAlso key.Equals(Keys.F7) Then
                MsgBox("Ctrl+Alt+F7 fue presionado.")
            End If
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
    
    'Solo funciona si se está trabajando en mi programa.
    'Necesito que sea a nivel Windows.

    ------------------------

    Atte. Pablo Fac.

    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]


    • Editado Admin Pablo Fac jueves, 11 de febrero de 2016 21:41 Actualización de Título y Descripción
    • Cambiado Enrique M. Montejo viernes, 12 de febrero de 2016 7:29 Pregunta relacionada con aplicación de Windows Forms.
    jueves, 11 de febrero de 2016 17:08

Todas las respuestas

  • Hola:

     Creo que ese tipo de configuraciones se realiza en Windows directamente, ya que es este el que detectara la tecla pulsada.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 11 de febrero de 2016 17:31
  • Hola JoséLuisGarcía.

    Si lo hace Windows directamente, las combinaciones de teclas se guardan en algún lado? en el Registro?. Si es así, ¿cual es la dirección?.

    Habrá alguna forma para forzar a Windows a que entregue las teclas que se pulsen?


    Saludos. Atentamente Pablo Fac.

    [VB.Net - Visual Studio 2015]




    jueves, 11 de febrero de 2016 18:11
  • Tanto asi como donde se almacena esa configuracion no lo se pero si se que desde el panel de control puedes modificarla:

    Control Panel -> Keyboard -> Key Settings


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 11 de febrero de 2016 18:17
  • Pues no tengo el mismo panel de control. Sera porque es Windows 8.1?

    Imagen: https://social.msdn.microsoft.com/Forums/getfile/802258


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    jueves, 11 de febrero de 2016 18:29
  • 'Créditos del código: Leandro Tuttini

    'en https://social.msdn.microsoft.com/Forums/es-ES/7e0cb09f-a13a-401d-8609-a2d57f5d7f94/atajos-de-teclado-para-botones?forum=vcses

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean        
        If (keyData <> Keys.Add) And (keyData <> Keys.Oemplus) Then            
            MsgBox("Hacer Click.")        
        End If        
        Return True    
    End Function

    Esto es parte de lo que necesito, aunque todavía me falta que se tome en cualquier programa, y poder combinar con Ctrl o Alt.

    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    jueves, 11 de febrero de 2016 18:51
  • 'Acá otro code
    
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
            Dim modifiers As Keys = (keyData And Keys.Modifiers)
            Dim key As Keys = (keyData And Keys.KeyCode)
            If (modifiers.Equals(Keys.Control Or Keys.Alt)) AndAlso key.Equals(Keys.F7) Then
                MsgBox("Ctrl+Alt+F7 fue presionado.")
            End If
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
    
    'Solo funciona si se está trabajando en mi programa.
    'Necesito que sea a nivel Windows.


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    jueves, 11 de febrero de 2016 21:19
  • Hola:

     Claro que solo funciona cuando tienes tu programa, si quieres que algo este ejecutandose todo el tiempo necesitaras configurar el mismo Windows desconozco si por medio de la API de windows puedas hacerlo, pero la idea es cambiar la configuracion del teclado, como se hace desde el panel de control.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 11 de febrero de 2016 21:22
  • Ok, actualizaré la pregunta pero dejaré el hilo abierto por si alguien conoce la respuesta. Igualmente gracias x responderme.

    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    jueves, 11 de febrero de 2016 21:37