Module1.bas
上传用户:hylsl0102
上传日期:2022-03-20
资源大小:3k
文件大小:3k
源码类别:

钩子与API截获

开发平台:

Visual Basic

  1. Attribute VB_Name = "Module1"
  2. Option Explicit
  3. Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  4. Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  5. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  6. Public Const GWL_WNDPROC = -4&
  7. Public Const WM_MOUSEWHEEL = &H20A
  8. Public Const WM_MOUSEMOVE = &H200
  9. Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  10. Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  11. Public Type POINTAPI
  12.         x As Long
  13.         y As Long
  14. End Type
  15. Public OldWindowProc As Long '用来保存系统默认的窗口消息处理函数的地址
  16. Public hwndTextBox As Long '用来保存Text1控件的句柄
  17. Public hwndPict As Long
  18. Public OldWindowProc1 As Long
  19. '自定义的消息处理函数
  20. Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  21.     On Error Resume Next
  22.     If Msg = WM_MOUSEMOVE Then
  23.        
  24.         '下面得到鼠标位置处的对象的句柄
  25.         Dim CurPoint As POINTAPI, hwndUnderCursor As Long
  26.         GetCursorPos CurPoint
  27.         hwndUnderCursor = WindowFromPoint(CurPoint.x, CurPoint.y)
  28.         '如果鼠标位于Form1.Text1内部,则对鼠标滚轮事件进行处理
  29.         If hwndUnderCursor = hwndTextBox Then
  30.             Form1.Caption = "在text1内"
  31. '            If wParam = MK_LBUTTON Then
  32. ''                Form1.Text1.SetFocus
  33. '            End If
  34.         Else
  35.           If hwndUnderCursor = hwndPict Then
  36.              Form1.Caption = "在picture1内"
  37.              Debug.Print Msg & " " & wParam & " " & lParam
  38. '             If wParam = MK_LBUTTON Then
  39. ''                x = Int(LOWORD(lParam))
  40. ''                y = Int(HIWORD(lParam))
  41. '            End If
  42.           End If
  43.         End If
  44.     Else
  45.         '调用Text1的默认窗口消息处理函数
  46.         NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam)
  47.         NewWindowProc = CallWindowProc(OldWindowProc1, hwnd, Msg, wParam, lParam)
  48.     End If
  49. End Function
  50. Public Function HIWORD(LongIn As Long) As Integer
  51.   '     取出32位值的高16位
  52.         HIWORD = (LongIn And &HFFFF0000)  &H10000
  53.   End Function
  54.       
  55.   Public Function LOWORD(LongIn As Long) As Integer
  56.         '     取出32位值的低16位
  57.         LOWORD = LongIn And &HFFFF&
  58.   End Function
  59.