Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: RHL en Noviembre 12, 2011, 08:44:12 pm

Título: Se pueden usar Hooks en DLL?
Publicado por: RHL en Noviembre 12, 2011, 08:44:12 pm
bueno eso! :)
e estado probando haciendo unas DLLs con el metodo de crear Dlls y llamarlas tipo api:
http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm

ahora estoy haciendo una dll que haga un hooks hacia el mouse :P
el problema es que cuando la llamo a la funcion no me retorna ningun valor ( le e puesto de retorno un boolean )
pienso que es porque el hook llama a una funcion callback :P sera que no se puede hacer un hook en dll?
pense en depurar la dll para ver que pasaba pero no encuentro como :P
alguien sabe que puedo hacer o que pasa ?=
gracias :)

el hook esta bien lo e probado en un proyecto con form y todo y funciona :)
Título: Re:Se pueden usar Hooks en DLL?
Publicado por: seba123neo en Noviembre 13, 2011, 12:45:26 am
How can I get HINSTANCE from a DLL? (http://stackoverflow.com/questions/2126657/how-can-i-get-hinstance-from-a-dll)
Título: Re:Se pueden usar Hooks en DLL?
Publicado por: RHL en Noviembre 13, 2011, 02:52:43 am
Holas :)
pues e probado seba123neo pero me devuelve 0 osea que no se engancha
e probado con teclado y con mouse y no e podido :(
el codigo:

e probado con la API (  GetModuleHandle ) pasarle como parametro nulo ( "" ) y el nombre de la dll ( proyecto1.dll ) y no funka :(

modulo bas:
Código: (VB) [Seleccionar]
Option Explicit

Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (Dest As Any, Src As Any, ByVal ln As Long)
Private 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
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

Private Const WH_KEYBOARD_LL    As Long = &H13
Public hHook As Long
Const VK_SHIFT = &H10

Public Function MMM1(ByVal n1 As Integer, ByVal n2 As Integer) As Long
Dim tmp As Long

tmp = n1 + n2
RtlMoveMemory ByVal VarPtr(MMM1), ByVal VarPtr(tmp), 4

MsgBox "SET HOOK..."
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardProc, GetModuleHandle(""), 0)
MsgBox hHook
MsgBox "FINISH..."
End Function


Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If idHook < 0 Then
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    Else
        If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
            MsgBox "Shift-S "
        End If
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    End If
End Function

el rtlmovememory es solo operacion y que me devuelva un valor :P