【开源项目】花密(Flower Password)VB版之鼠标按键钩子模块

'*****************************************************************
' Copyright (c) 2011-2012 FlowerPassword.com All rights reserved.
'      Author : xLsDg @ Xiao Lu Software Development Group
'        Blog : http://hi.baidu.com/xlsdg
'          QQ : 4 4 7 4 0 5 7 4 0
'     Version : 1 . 0 . 0 . 0
'        Date : 2 0 1 2 / 0 4 / 0 7
' Description :
'     History :
'*****************************************************************
Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long

Private Declare Function WindowFromPoint _
                Lib "user32.dll" (ByVal xPoint As Long, _
                                  ByVal yPoint As Long) As Long

Private Type RECT

    Left As Long
    Top As Long
    Right As Long
    Bottom As Long

End Type

Private Declare Function GetWindowRect _
                Lib "user32.dll" (ByVal hwnd As Long, _
                                  lpRect As RECT) As Long

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

Private Declare Function CallNextHookEx _
                Lib "user32.dll" (ByVal hHook As Long, _
                                  ByVal ncode As Long, _
                                  ByVal wParam As Long, _
                                  lParam As Any) As Long

Private Declare Sub CopyMemory _
                Lib "kernel32.dll" _
                Alias "RtlMoveMemory" (lpvDest As Any, _
                                       ByVal lpvSource As Long, _
                                       ByVal cbCopy As Long)

Private Type MOUSEMSGS

    X As Long
    Y As Long
    a As Long
    b As Long
    time As Long

End Type

Private Const WH_MOUSE_LL = 14

Private Const HC_ACTION = 0

Private Const WM_MOUSEMOVE = &H200

Private Const WM_LBUTTONDOWN = &H201

Private Const WM_LBUTTONUP = &H202

Private Const WM_LBUTTONDBLCLK = &H203

Private Const WM_RBUTTONDOWN = &H204

Private Const WM_RBUTTONUP = &H205

Private Const WM_RBUTTONDBLCLK = &H206

Private Const WM_MBUTTONDOWN = &H207

Private Const WM_MBUTTONUP = &H208

Private Const WM_MBUTTONDBLCLK = &H209

Private Const WM_MOUSEACTIVATE = &H21

Private Const WM_MOUSEFIRST = &H200

Private Const WM_MOUSELAST = &H209

Private Const WM_MOUSEWHEEL = &H20A

Private MouseMsg As MOUSEMSGS

Private lHook    As Long

Public Function SetMouseHook() As Long
    lHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf CallMouseHookProc, App.hInstance, 0)
    SetMouseHook = lHook

End Function

Public Function UnSetMouseHook() As Long
    UnSetMouseHook = UnhookWindowsHookEx(lHook)

End Function

Private Function CallMouseHookProc(ByVal code As Long, _
                                   ByVal wParam As Long, _
                                   ByVal lParam As Long) As Long

    If code = HC_ACTION Then
        If FrmMain.Visible Then

            Dim frmRec As RECT

            Select Case wParam

                Case WM_LBUTTONDOWN '左键按下
                    CopyMemory MouseMsg, lParam, LenB(MouseMsg)
                    GetWindowRect FrmMain.hwnd, frmRec

                    If frmRec.Left <= MouseMsg.X And MouseMsg.X <= frmRec.Right And frmRec.Top <= MouseMsg.Y And MouseMsg.Y <= (frmRec.Bottom + 130) Then
                    Else
                        FrmMain.FrmHide True, False

                    End If

                    CallMouseHookProc = 0

                Case WM_MBUTTONDOWN '中键按下
                    CopyMemory MouseMsg, lParam, LenB(MouseMsg)
                    GetWindowRect FrmMain.hwnd, frmRec

                    If frmRec.Left <= MouseMsg.X And MouseMsg.X <= frmRec.Right And frmRec.Top <= MouseMsg.Y And MouseMsg.Y <= frmRec.Bottom Then
                    Else
                        FrmMain.FrmHide False, False

                    End If

                    CallMouseHookProc = 0

                Case WM_RBUTTONDOWN '右键按下
                    CopyMemory MouseMsg, lParam, LenB(MouseMsg)
                    GetWindowRect FrmMain.hwnd, frmRec

                    If frmRec.Left <= MouseMsg.X And MouseMsg.X <= frmRec.Right And frmRec.Top <= MouseMsg.Y And MouseMsg.Y <= frmRec.Bottom Then
                    Else
                        FrmMain.FrmHide False, False

                    End If

                    CallMouseHookProc = 0

            End Select

        End If

    End If

    If code <> 0 Then
        CallMouseHookProc = CallNextHookEx(0, code, wParam, lParam)

    End If

End Function



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hook钩子)并不是一项很难的技术,但对于初学者来说还是一个不小的门槛。为此,我将鼠标Hook做成了一个可视化的控件,通过简单的设置几个属性,就可以截获或跟踪其它应用程序的鼠标动作。**********控件介绍:【属性】1.Blocked: Boolean;确定是截获还是跟踪鼠标动作,True对应截获,False对应跟踪。默认值为False2.HookedExeName: string;指定被Hook的应用程序名称。为空时对所有的应用程序起作用。默认值为空3.Active: Boolean;是否处于Hook状态,只读。4.DllName: string;Mouse钩子的dll名称,默认为MouseHook.dll,只读。5.DLLLoaded: Boolean;MouseHook.dll是否被加载,只读。【方法】1.function Start: Boolean;开始Hook2.procedure Stop;停止Hook【事件】 WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_RBUTTONDBLCLK, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDBLCLK, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_NCLBUTTONDBLCLK, WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, WM_NCRBUTTONDBLCLK, WM_NCRBUTTONDOWN, WM_NCRBUTTONUP, WM_NCMBUTTONDBLCLK, WM_NCMBUTTONDOWN, WM_NCMBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_NCMOUSEMOVE, WM_MOUSEACTIVATE, WM_NCHITTEST, WM_CAPTURECHANGED我处理了如上的鼠标事件,注意其中有几个事件我在测试时发现无法Hook,它们为WM_MBUTTONDBLCLK,WM_NCMBUTTONDBLCLK,WM_MOUSEACTIVATE,WM_NCHITTEST,WM_CAPTURECHANGED建议:不要将HookedExeName:=''; 和 Blocked:=True; 同时设置**********【使用说明】1.首先安装“鼠标Hook控件”目录下的控件2.必须将mousehook.dll拷贝到你开发的应用程序目录下,或系统目录下,如system32【多说几句】1.我提供了一个名为test.exe的demo,该例子是对notepad.exe进行Hook的,因此,使用前先启动notepad.exe,再点击界面上的“开始”,否则会提示“找不到指定的进程”!2.你可以参考我的控件设计模式来设计自己的Hook控件,如键盘Hook。3.本来想写一个组件包的,其中包括各种Hook控件,以及读写端口的控件,以方便初学者的使用,可是要些论文,以后再说吧。 黄晓斌 hxb_leiyuan2000@163.net QQ:478522325
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值