Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ignorantev1.1 en 21 Marzo 2013, 21:53 pm



Título: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 21 Marzo 2013, 21:53 pm
Buenas, pues estoy haciendo una aplicación de la que ocupo capturar clicks del mouse en otra aplicación, casi todo bien, ya que pretendo realizar la captura cuando ambos botones del mouse sean presionados al mismo tiempo, algo así como "WM_LBUTTONDOWN & WM_RBUTTONDOWN", pero no me funciona. ¿Alguna idea?

Saludos y gracias.


Título: Re: [AYUDA] Mouse Hook
Publicado por: x64core en 21 Marzo 2013, 22:39 pm
Buenas, pues estoy haciendo una aplicación de la que ocupo capturar clicks del mouse en otra aplicación, casi todo bien, ya que pretendo realizar la captura cuando ambos botones del mouse sean presionados al mismo tiempo, algo así como "WM_LBUTTONDOWN & WM_RBUTTONDOWN", pero no me funciona. ¿Alguna idea?

Saludos y gracias.

capturar ambos WM_LBUTTONDOWN, WM_RBUTTONDOWN, luego comprobar por MK_RBUTTON y MK_LBUTTON ambos esten presionados también.


Título: Re: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 21 Marzo 2013, 23:12 pm
A ver:

Yo uso:

Código
  1. Private function MSProc(byval nCode as long, byval wParam as long, byval lParam as long) as long
  2. if wParam = WM_LBUTTONDOWN then
  3. 'ETC, ETC
  4. end if
  5.  

¿Cómo va el tuyo?

¡Saludos y gracias por tu respuesta!


Título: Re: [AYUDA] Mouse Hook
Publicado por: raul338 en 22 Marzo 2013, 01:33 am
Quizas sea medio tonto jeje, pero probaste usando

If wParam = WM_LBUTTONDOWN AND WM_RBUTTONDOWN THen...


Título: Re: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 22 Marzo 2013, 02:52 am
Sí, Raul338, ya lo había considerado, pero no va.  :-\

Saludos.


Título: Re: [AYUDA] Mouse Hook
Publicado por: x64core en 22 Marzo 2013, 03:07 am
A ver:

Yo uso:

Código
  1. Private function MSProc(byval nCode as long, byval wParam as long, byval lParam as long) as long
  2. if wParam = WM_LBUTTONDOWN then
  3. 'ETC, ETC
  4. end if
  5.  

¿Cómo va el tuyo?

¡Saludos y gracias por tu respuesta!



    If wParam = WM_LBUTTONDOWN Then
        If GetAsyncKeyState(MK_RBUTTON) Then
            Debug.Print "ok"
        End If

el mensaje fue WM_LBUTTONDOWN luego comprueba directamente el estado del otro boton del mouse, asi que
debes detectar ambos WM_LBUTTONDOWN  y WM_RBUTTONDOWN y luego MK_RBUTTON y MK_LBUTTON.


Título: Re: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 22 Marzo 2013, 04:08 am
Pues me va ¡de pelos!  ;D

Nunca consideré la función "GetAsyncKeyState" (En realidad no sabía que existía).

Muchas gracias, carnales.


Título: Re: [AYUDA] Mouse Hook
Publicado por: Elemental Code en 22 Marzo 2013, 19:53 pm
Async key state es una api y no es hook  :-\


Título: Re: [AYUDA] Mouse Hook
Publicado por: BlackZeroX en 23 Marzo 2013, 06:10 am
Async key state es una api y no es hook  :-\

Nadie dijo tal cosa...

Dulces Lunas!¡.


Título: Re: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 26 Marzo 2013, 07:05 am
Misma burra, nomás que revolcada:

Voy a finalizar la aplicación (la que pone los hooks), antes de que finalice doy por terminado el hook del mouse:

Código
  1. UnhookWindowsHookEx(msHook)

Después que "finaliza" la aplicación, la función que procesa el hook sigue funcionando lo cual provoca que se "frezee" Windows (hasta no cerrar el IDE de visual basic) o se cierra el IDE por si sólo. (porque no es todavía una aplicación, lo estoy corriendo del IDE). Para probar "mi teoría" puse "debug.print "Hola, sigo funcionando aún despues de hacer unhook ;)", y sí, el mensaje sigue apareciendo aún después de detener el programa:

¿Saben de alguna forma de terminar con el hook o manejarlo de tal manera que no suceda ésto?

Perdonen, saludos y gracias.


Título: Re: [AYUDA] Mouse Hook
Publicado por: x64core en 26 Marzo 2013, 15:59 pm
Misma burra, nomás que revolcada:

Voy a finalizar la aplicación (la que pone los hooks), antes de que finalice doy por terminado el hook del mouse:

Código
  1. UnhookWindowsHookEx(msHook)

Después que "finaliza" la aplicación, la función que procesa el hook sigue funcionando lo cual provoca que se "frezee" Windows (hasta no cerrar el IDE de visual basic) o se cierra el IDE por si sólo. (porque no es todavía una aplicación, lo estoy corriendo del IDE). Para probar "mi teoría" puse "debug.print "Hola, sigo funcionando aún despues de hacer unhook ;)", y sí, el mensaje sigue apareciendo aún después de detener el programa:

¿Saben de alguna forma de terminar con el hook o manejarlo de tal manera que no suceda ésto?

Perdonen, saludos y gracias.

En que procedimiento remueves el hook? Y de que forma estas terminando?
Asegurate que esta pasando sobre la funcion que remueve el hook y el retorno de la función. Si estas en presionando el boton parar del IDE, ese es el problema.


Título: Re: [AYUDA] Mouse Hook
Publicado por: ignorantev1.1 en 26 Marzo 2013, 16:32 pm
La app tiene un procedimiento para terminar los hooks y es llamado al finalizar la aplicación (ojo: finalizar, no parar el programa en el  IDE). En ese procedimiento:

Código
  1. funcion finalizarApp()
  2. ...
  3. call UnhookWindowsHookEx(msHook)
  4. hooks = false 'Esta bandera la utilizo para saber el estado de los hooks.
  5. ...
  6.  

Con la bandera "hooks" me aseguro que se haya pasado por el procedimiento que remueve los hooks. En la función que recibe al hook:

Código
  1. Public Function MSProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
  2.  
  3.    if not hooks then  debug.print "Hola, sigo funcionando después de hacer unhook, ¿te jode?"
  4.  
  5.    If nCode = 0 Then
  6.        'TODO
  7.    Else
  8.        If hooks Then msHook = CallNextHookEx(msHook, nCode, wParam, lParam)
  9.    End If
  10. End Function
  11.  

No recuerdo porque hice de esta forma la función, y no entiendo bien el para qué de "CallNextHookEx"...

Saludos y gracias.


Título: Re: [AYUDA] Mouse Hook
Publicado por: x64core en 26 Marzo 2013, 22:12 pm
La app tiene un procedimiento para terminar los hooks y es llamado al finalizar la aplicación (ojo: finalizar, no parar el programa en el  IDE). En ese procedimiento:

Código
  1. funcion finalizarApp()
  2. ...
  3. call UnhookWindowsHookEx(msHook)
  4. hooks = false 'Esta bandera la utilizo para saber el estado de los hooks.
  5. ...
  6.  

Con la bandera "hooks" me aseguro que se haya pasado por el procedimiento que remueve los hooks. En la función que recibe al hook:

Código
  1. Public Function MSProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
  2.  
  3.    if not hooks then  debug.print "Hola, sigo funcionando después de hacer unhook, ¿te jode?"
  4.  
  5.    If nCode = 0 Then
  6.        'TODO
  7.    Else
  8.        If hooks Then msHook = CallNextHookEx(msHook, nCode, wParam, lParam)
  9.    End If
  10. End Function
  11.  

No recuerdo porque hice de esta forma la función, y no entiendo bien el para qué de "CallNextHookEx"...

Saludos y gracias.

Yo no tengo ningun problema, Iniciar:
Código:
hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseMonitorWinProc, App.hInstance, 0&)
Remover:
Código:
call UnhookWindowsHookEx(hook)

De lo contrario verifica el valor de UnHookWindowsHookEx y el ultimo error.