Autor Tema: Que estoy haciendo mal!!??  (Leído 3309 veces)

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

xmbeat

  • Kilobyte
  • **
  • Mensajes: 84
  • Reputación: +3/-1
  • la vida no tiene sentido sin Dios
    • Ver Perfil
Que estoy haciendo mal!!??
« en: Octubre 01, 2010, 05:50:51 pm »
hace rato q no agarro el vb, pero esta tarde se me ocurrio un proyecto, y pues necesitaba hacer algo referente al mouse, segun yo quiero hacer un hook a este, pero me crashea justo en el copymemory, ya he intentado de varias maneras y siguen crasheando, aqui lo dejo para q checquen q falla


Código: (vb) [Seleccionar]
Const WH_MOUSE_LL As Long = 14
Type POINTAPI
    X As Long
    Y As Long
End Type
Type MOUSEHOOKSTRUCT
    pt As POINTAPI
    hwnd As Long
    wHitTestCode As Long
    dwExtraInfo As Long
End Type
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, mStruct As Any) As Long
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Function MouseProc(nCode As Long, wParam As Long, lParam As Long)
   
    Dim mStruct As MOUSEHOOKSTRUCT
    CopyMemory mStruct, ByVal lParam, Len(mStruct)
End Function

Function IniHook()
    hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0)
End Function
Function EndHook()
    UnhookWindowsHookEx hHook
End Function



El hombre encuentra a Dios detrás de cada puerta que la ciencia logra abrir. -Einstein

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:Que estoy haciendo mal!!??
« Respuesta #1 en: Octubre 01, 2010, 09:33:46 pm »
Form:
Código: (vb) [Seleccionar]
Option Explicit

Private Sub Form_Load()
  Me.AutoRedraw = True
  StartHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
  StopHook
End Sub

Modulo
Código: (vb) [Seleccionar]
Option Explicit

Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
 
Dim hHook As Long

Public Sub StartHook()
    hHook = SetWindowsHookEx(14, AddressOf MouseProc, App.hInstance, 0)
End Sub
 
Public Sub StopHook()
    Call UnhookWindowsHookEx(hHook)
End Sub
 
Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
    'On Error Resume Next
    If wParam = 516 Then
      Form1.Print "CLICK BOTON DERECHO"
    ElseIf wParam = 517 Then Form1.Print "SOLTÓ BOTON DERECHO"
    ElseIf wParam = 513 Then Form1.Print "CLICK BOTON IZQUIERDO"
    ElseIf wParam = 514 Then Form1.Print "SOLTÓ BOTON IZQUIERDO"
    ElseIf wParam = 519 Then Form1.Print "CLICK BOTON MEDIO"
    ElseIf wParam = 520 Then Form1.Print "SOLTÓ BOTON MEDIO"
    End If
   
    Form1.Caption = wParam
End Function

DoEvents! :P

xmbeat

  • Kilobyte
  • **
  • Mensajes: 84
  • Reputación: +3/-1
  • la vida no tiene sentido sin Dios
    • Ver Perfil
Re:Que estoy haciendo mal!!??
« Respuesta #2 en: Octubre 02, 2010, 12:56:40 am »
Psyke1, gracias, ya lo sabia, pero yo preguntaba como pasaba el la estructura q pasa por lparam, fijate en esto
http://msdn.microsoft.com/en-us/library/ms644968(v=VS.85).aspx


pero segun yo el copymemory lo hago bien, pero crashea, ese es elproblema, gracias de todos modos!!

El hombre encuentra a Dios detrás de cada puerta que la ciencia logra abrir. -Einstein

xmbeat

  • Kilobyte
  • **
  • Mensajes: 84
  • Reputación: +3/-1
  • la vida no tiene sentido sin Dios
    • Ver Perfil
Re:Que estoy haciendo mal!!??
« Respuesta #3 en: Octubre 02, 2010, 01:41:45 am »
Edito>>
Acabo de rehacer lo q tenia y hasta en este momento me he dado cuenta q crasheaba por q la funcion no devuelve nada solo basto con poner 'As Long' a la funcion!!!
Que ciego estoy!!! jjaaja, Solucionado!!
El hombre encuentra a Dios detrás de cada puerta que la ciencia logra abrir. -Einstein