Detectar atajos de teclado

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

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

seba123neo

cada registrada de combinaciones tiene un ID, es el segundo parametro, vos ahi estas registrando todas con el mismo ID = 1 , y cuando repetis los ID, solo te toma la ultima ...debes hacer algo como:

If RegisterHotKey(hWnd, 1, MOD_CONTROL Or MOD_ALT, VK_1) = 0 Then
...codigo...
If RegisterHotKey(hWnd, 2, MOD_CONTROL Or MOD_ALT, VK_1) = 0 Then
codigo...
If RegisterHotKey(hWnd, 3, MOD_CONTROL Or MOD_ALT, VK_1) = 0 Then
codigo....

y en el NewWindowProc el parametro wParam, te va a llegar con el ID de la combinacion que apretaste, y bueno ahi haces un if o un select case y listo...

PD: para desregistrar tambien debes hacerlo con el ID...

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

ok gracias sea123neo, ahora si lo entendi

50l3r

esto en el form load:

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, 2, MOD_CONTROL Or MOD_ALT, VK_2) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 3, MOD_CONTROL Or MOD_ALT, VK_3) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 4, MOD_CONTROL Or MOD_ALT, VK_4) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 5, MOD_CONTROL Or MOD_ALT, VK_5) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 6, MOD_CONTROL Or MOD_ALT, VK_6) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 7, MOD_CONTROL Or MOD_ALT, VK_7) = 0 Then
    MsgBox " Hubo un error ", vbCritical
    Exit Sub
    End If
    If RegisterHotKey(hWnd, 8, 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)


esto en el modulo:
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 wparam = 1 then msgbox "apretaste 1"
if wparam = 2 then msgbox "apretaste 2"
if wparam = 3 then msgbox "apretaste 3"
if wparam = 4 then msgbox "apretaste 4"
if wparam = 5 then msgbox "apretaste 5"
if wparam = 6 then msgbox "apretaste 6"
if wparam = 7 then msgbox "apretaste 7"
if wparam = 8 then msgbox "apretaste 8"

   
    NewWindowProc = CallWindowProc(WinProc, hWnd, Msg, wParam, lParam)

End Function


Karcrack

Utiliza un Select Case envez de tantos Ifs :rolleyes: :rolleyes:

50l3r

solo lo puse para ver si funcionaba, no funciona

al iniciar el proyecto se crea un bucle que dice" apretaste1"

raul338

es porque no pussite flitro. o sea, todos esos IF tenes que meterlos dentro de un if que valide si Msg es WM_HOTKEY

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 ' Creo que es &H83 si mi memoria no me falla :P
if wparam = 1 then msgbox "apretaste 1"
if wparam = 2 then msgbox "apretaste 2"
if wparam = 3 then msgbox "apretaste 3"
if wparam = 4 then msgbox "apretaste 4"
if wparam = 5 then msgbox "apretaste 5"
if wparam = 6 then msgbox "apretaste 6"
if wparam = 7 then msgbox "apretaste 7"
if wparam = 8 then msgbox "apretaste 8"
end If

    NewWindowProc = CallWindowProc(WinProc, hWnd, Msg, wParam, lParam)

End Function


PD: La proxima sere un poco mas claro para que me entiendas mejor :P (x la explicacion de antes :xD)