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.
Cita de: 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.
capturar ambos WM_LBUTTONDOWN, WM_RBUTTONDOWN, luego comprobar por MK_RBUTTON y MK_LBUTTON ambos esten presionados también.
A ver:
Yo uso:
Private function MSProc(byval nCode as long, byval wParam as long, byval lParam as long) as long
if wParam = WM_LBUTTONDOWN then
'ETC, ETC
end if
¿Cómo va el tuyo?
¡Saludos y gracias por tu respuesta!
Quizas sea medio tonto jeje, pero probaste usando
If wParam = WM_LBUTTONDOWN AND WM_RBUTTONDOWN THen...
Sí, Raul338, ya lo había considerado, pero no va. :-\
Saludos.
Cita de: ignorantev1.1 en 21 Marzo 2013, 23:12 PM
A ver:
Yo uso:
Private function MSProc(byval nCode as long, byval wParam as long, byval lParam as long) as long
if wParam = WM_LBUTTONDOWN then
'ETC, ETC
end if
¿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.
Pues me va ¡de pelos! ;D
Nunca consideré la función "GetAsyncKeyState" (En realidad no sabía que existía).
Muchas gracias, carnales.
Async key state es una api y no es hook :-\
Cita de: Elemental Code en 22 Marzo 2013, 19:53 PM
Async key state es una api y no es hook :-\
Nadie dijo tal cosa...
Dulces Lunas!¡.
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:
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.
Cita de: 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:
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.
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:
funcion finalizarApp()
...
call UnhookWindowsHookEx(msHook)
hooks = false 'Esta bandera la utilizo para saber el estado de los hooks.
...
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:
Public Function MSProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
if not hooks then debug.print "Hola, sigo funcionando después de hacer unhook, ¿te jode?"
If nCode = 0 Then
'TODO
Else
If hooks Then msHook = CallNextHookEx(msHook, nCode, wParam, lParam)
End If
End Function
No recuerdo porque hice de esta forma la función, y no entiendo bien el para qué de "CallNextHookEx"...
Saludos y gracias.
Cita de: 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:
funcion finalizarApp()
...
call UnhookWindowsHookEx(msHook)
hooks = false 'Esta bandera la utilizo para saber el estado de los hooks.
...
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:
Public Function MSProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
if not hooks then debug.print "Hola, sigo funcionando después de hacer unhook, ¿te jode?"
If nCode = 0 Then
'TODO
Else
If hooks Then msHook = CallNextHookEx(msHook, nCode, wParam, lParam)
End If
End Function
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:
hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseMonitorWinProc, App.hInstance, 0&)
Remover:
call UnhookWindowsHookEx(hook)
De lo contrario verifica el valor de UnHookWindowsHookEx y el ultimo error.