Autor
|
Tema: Hook global para los Windows Messages? (Leído 3,712 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
¿ Alguien sería tán amable de mostrarme un código para crear un Hook de bajo nivel GLOBAL (que funcione FUERA del Form) para manejar los mensajes de windows (En concreto WM_MOUSEWHEEL) ? Esto he aprendido a hacerlo dentro del Form con la Interface "IMessageFilter", pero cuando lo intento hacer para que funcione fuera del form no hay manera, todo lo que consigo son un par de Fails!, Me han explicado la manera de hacerlo global, se puede hacer importando la librería user32.dll (La función "SetWindowsHookEx") para crear un low-level hook para interceptar los mensajes de Windows, la teoría la tengo, pero no sé hacerlo, me trabo en el punto de intentar usar la función "SetWindowsHookEx" y crear el sub para interceptar los mensajes (if m.message = &HX then...), todo el código que encuentro es para C++/C#, y para lo poco que encuentro de VBNET, (que además tiene poco que ver con los mensajes que quiero interceptar) ni me entero, bastante dificil. Lo que necesito es hacer algo como esto: Pseudo-código: Dim mousewheel_up as boolean Dim mousewheel_down as boolean Sub that Overides the windows messages to set the mousewheel booleans If mousewheel_up then msgbox("MouseWheel up") If mousewheel_down then msgbox("MouseWheel down") End sub
Pero como ya digo, fuera del form. Un saludo.
|
|
« Última modificación: 31 Mayo 2013, 20:48 pm por EleKtro H@cker »
|
En línea
|
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
@Maurice_Lupin
Gracias, ya no recordaba que hice esta pregunta xD
Al final ya lo conseguí, conseguí usar la API para capturar si la rueda que se mueve es la de arriba o la de abajo, lo que no conseguí era una vez capturado, reproducir ese movimiento del ratón fuera de la APP, es decir mover la rueda del ratón, así que lo dejé a medias.
Bueno, un saludo!
|
|
|
En línea
|
|
|
|
Maurice_Lupin
Desconectado
Mensajes: 356
GPS
|
Cuando requiero usar funciones de la API, lo que hago es buscar code en C/C++ y pasarlo a VB.NET guiandome con http://www.pinvoke.netIncluso consegui el serial del USB. Saludos y si puedes postea tu code para aprender.
|
|
|
En línea
|
Un error se comete al equivocarse.
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Cuando requiero usar funciones de la API, lo que hago es buscar code en C/C++ y pasarlo a VB.NET guiandome con http://www.pinvoke.netYo hago exactamente lo mismo. Primero busco en MSDN implementaciones e info en C/C++ sobre las API a utilizar y después el equivalente en VB.NET (en mi caso) a través de Pinvoke. De esta manera comprendes mejor el funcionamiento y uso de éstas. Recomiendo esta práctica Saludos.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Acabo de descubrir que para enviar un "scroll up/scroll down" se hace con la función SendInput: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspxsi puedes postea tu code para aprender. Public Class Form1 Public Structure Point Public X As Integer Public Y As Integer End Structure Public Structure Msllhookstruct Public Location As Point Public MouseData As Integer Public Flags As Integer Public Time As Integer Public ExtraInfo As Integer End Structure Private Delegate Function HookProc(nCode As Integer, wParam As Integer, ByRef lParam As Msllhookstruct) As Integer <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function SetWindowsHookEx(ByVal hookType As Integer, ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr End Function <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As Msllhookstruct) As IntPtr End Function Public Hook As IntPtr Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Hook = SetWindowsHookEx(14, AddressOf Proc, Process.GetCurrentProcess().MainModule.BaseAddress.ToInt32(), 0) End Sub Private Function Proc(nCode As Integer, wParam As Integer, ByRef lParam As Msllhookstruct) As IntPtr If wParam = 522 Then Dim Delta = CShort(lParam.MouseData >> 16) If Delta > 0 Then ' Up MsgBox("Up") ElseIf Delta < 0 Then ' Down MsgBox("Down") End If End If Return CallNextHookEx(Hook, nCode, wParam, lParam) End Function End Class
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Microsoft integrará Office a Facebook Messages
Noticias
|
Novlucker
|
3
|
2,124
|
16 Noviembre 2010, 22:20 pm
por jdc
|
|
|
Keyboard hook windows desde dll
Programación C/C++
|
patilanz
|
5
|
3,200
|
2 Enero 2015, 14:40 pm
por ThunderCls
|
|
|
windows promete lanzar un antisploits global
Seguridad
|
el padre de los hackers
|
1
|
2,007
|
7 Noviembre 2015, 07:17 am
por MCKSys Argentina
|
|
|
Android Messages para PC estará vinculado a la cuenta de nuestro móvil
Noticias
|
wolfbcn
|
0
|
2,198
|
13 Abril 2018, 15:10 pm
por wolfbcn
|
|
|
Hook Library Windows
Ingeniería Inversa
|
Geovane
|
0
|
1,839
|
30 Octubre 2018, 16:05 pm
por Geovane
|
|