Detectar atajos de teclado

Iniciado por 50l3r, 26 Enero 2010, 23:53 PM

0 Miembros y 1 Visitante están viendo este tema.

50l3r

Muy buneas, quisiera saber como detectar atajos de teclado, es decir como saber en mi programa si se ha pulsado alt + f4 por ejemplo

alguien sabe con que funcion se puede hacer? intente con la api getasynckeystate pero me lo detecta unicamente cuando las pulso a la vez, no cuando dejo pulsada,una y despues otra, nose si me entendi bien

saludos

50l3r


seba123neo

es mejor con la api RegisterHotKey, ya que eso solamente funciona si tu aplicación esta activa.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

50l3r

pues lo iva a preguntar ahora mismo, me di cuenta cuando lo acabe que solo recibe la accion si tiene el foco

50l3r

tengo una duda en esto ultimo:

RegisterHotKey(hWnd, 1, MOD_CONTROL, VK_V)

ahi apretando control + v genera el evento

pero si yo quisiera pasarle 3 teclas para un atajo de teclado, por ejemplo control + v + 1

como hago eso?

saludos

seba123neo

con un Or vas a agregando mas...por ejemplo CTRL + ALT + 1

Código (vb) [Seleccionar]
If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_NUMPAD1) = 0 Then

pero fijate que el tercer parametro no podria recibir la tecla "V", mira la documentacion de la api, ahi te explica solo cual pueden ser.

http://msdn.microsoft.com/en-us/library/ms646309%28VS.85%29.aspx

saludos.





La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

50l3r

#6
ok muchas gracias

mira tengo otra duda, el proceso para ello es el sigueinte

Código (vb) [Seleccionar]
If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_1) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_2) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_3) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_4) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_5) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_6) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_7) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_8) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
     
    WinProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf NewWindowProc)


y en el modulo es asi:

Código (vb) [Seleccionar]
Public Function NewWindowProc( _
                ByVal hWnd As Long, _
                ByVal Msg As Long, _
                ByVal wParam As Long, _
                ByVal lParam As Long) As Long

    If Msg = &H82 Then
       
       Call SetWindowLong(hWnd, GWL_WNDPROC, WinProc)
       Call UnregisterHotKey(hWnd, 1)
   
    End If

   
    If Msg = WM_HOTKEY Then
       MsgBox "atajos dados"
    End If
    NewWindowProc = CallWindowProc(WinProc, hWnd, Msg, wParam, lParam)

End Function


como hago para identificar si se ha dado a ctrl + alt + 2 en vez  de a ctrl + alt + 7 por ejemplo? ya que para identificarlo usan la constante msg y devuelve unicamente el valor de que se ha ejecutado la pulsacion de teclas, una cualquiera

saludos

raul338

En el segundo parametro de RegisterHotKey deben ser todos numeros distintos (imagina, es como un handle del Hotkey) y en el sub NewWindowProc en lparam (o wparam si no me equivoco) devuelve el identificador del hotkey presionado (o sea, el segundo parametro del RegisterHotKey)

50l3r


Karcrack

http://msdn.microsoft.com/en-us/library/bb775233(VS.85).aspx
:-*