Advertisement
AZJIO

Hook_MOUSE хук мыши

Apr 30th, 2012
3,674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 4.85 KB | None | 0 0
  1. #include <WinAPI.au3>
  2. #include <WindowsConstants.au3>
  3.  
  4. Global $hHook, $hStub_KeyProc, $iEditLog, $Gui
  5.  
  6. ; в AutoIt3 v3.3.6.1 и ниже эти константы не определены
  7. ; Global Const $WM_MBUTTONDBLCLK = 0x0209
  8. ; Global Const $WM_RBUTTONDBLCLK = 0x0206
  9. ; Global Const $WM_MOUSEHWHEEL = 0x020E ???
  10.  
  11. _Main()
  12.  
  13. Func _Main()
  14.     OnAutoItExitRegister("Cleanup")
  15.  
  16.     Local $hmod
  17.  
  18.     $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
  19.     $hmod = _WinAPI_GetModuleHandle(0)
  20.     $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
  21.  
  22.     ; Esc - для закрытия скрипта
  23.  
  24.     $Gui=GUICreate('Пример перехвата с помощю хука', 700, 260, -1 , -1, $WS_OVERLAPPEDWINDOW)
  25.     $iEdit = GUICtrlCreateEdit('', 5, 5, 290, 250)
  26.     $iEditLog = GUICtrlCreateEdit('', 300, 5, 390, 250)
  27.     GUISetState()
  28.  
  29.     Do
  30.     Until GUIGetMsg()=-3
  31. EndFunc
  32. ;===========================================================
  33. ; callback function
  34. ;===========================================================
  35. Func _KeyProc($nCode, $wParam, $lParam)
  36.     Local $tKEYHOOKS, $X, $Y, $tmp, $Delta
  37.     If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) ; переход к следующей цепочки хуков в очереди (не срабатывает)
  38.     $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
  39.     ; координаты мыши X, Y
  40.     $X = DllStructGetData($tKEYHOOKS, "vkCode")
  41.     $Y = DllStructGetData($tKEYHOOKS, "scanCode")
  42.  
  43. Switch $wParam
  44.     Case $WM_MOUSEWHEEL ; если колесо мыши крутится
  45.         $Delta = BitShift(DllStructGetData($tKEYHOOKS, "flags"), 16) ; определяет вниз или вврх
  46.        
  47.         If $Delta > 0 Then
  48.             $tmp= 'колесо мыши сдвинулось ВВЕРХ ^'
  49.         Else
  50.             $tmp= 'колесо мыши сдвинулось ВНИЗ v'
  51.         EndIf
  52.         $tmp &= ' ('&$Delta&')'
  53.        
  54.     Case $WM_LBUTTONDOWN
  55.         $tmp= 'Нажатие Левой кнопкой мыши'
  56.        
  57.     Case $WM_LBUTTONUP
  58.         $tmp= 'Отжатие Левой кнопкой мыши'
  59.        
  60.     Case $WM_MBUTTONDOWN
  61.         $tmp= 'Нажатие Средней кнопкой мыши'
  62.        
  63.     Case $WM_MBUTTONUP
  64.         $tmp= 'Отжатие Средней кнопкой мыши'
  65.        
  66.     Case $WM_RBUTTONDOWN
  67.         $tmp= 'Нажатие Правой кнопкой мыши'
  68.        
  69.     Case $WM_RBUTTONUP
  70.         $tmp= 'Отжатие Правой кнопкой мыши'
  71.        
  72.     Case $WM_XBUTTONDOWN
  73.         $tmp= 'Нажатие Дополнительной кнопкой мыши'
  74.        
  75.     Case $WM_XBUTTONUP
  76.         $tmp= 'Отжатие Дополнительной кнопкой мыши'
  77.        
  78. #cs
  79. ; это блок не работает
  80.        
  81.     Case $WM_LBUTTONDBLCLK ; не работает
  82.         $tmp= 'Двойной клик Левой кнопкой мыши'
  83.        
  84.     Case $WM_MBUTTONDBLCLK ; не работает
  85.         $tmp= 'Двойной клик Средней кнопкой мыши'
  86.        
  87.     Case $WM_RBUTTONDBLCLK ; не работает
  88.         $tmp= 'Двойной клик Правой кнопкой мыши'
  89.        
  90.     Case $WM_XBUTTONDBLCLK ; не работает
  91.         $tmp= 'Двойной клик дополнительной кнопкой мыши'
  92.        
  93.     Case $WM_NCLBUTTONDBLCLK
  94.         $tmp= 'Двойной клик Левой на заголовке'
  95.        
  96.     Case $WM_NCLBUTTONDOWN
  97.         $tmp= 'Нажатие Левой на заголовке'
  98.        
  99.     Case $WM_NCLBUTTONUP
  100.         $tmp= 'Отжатие Левой на заголовке'
  101.        
  102.     Case $WM_NCMBUTTONDBLCLK
  103.         $tmp= 'Двойной клик Средней на заголовке'
  104.        
  105.     Case $WM_NCMBUTTONDOWN
  106.         $tmp= 'Нажатие Средней на заголовке'
  107.        
  108.     Case $WM_NCMBUTTONUP
  109.         $tmp= 'Отжатие Средней на заголовке'
  110.        
  111.     Case $WM_NCRBUTTONDBLCLK
  112.         $tmp= 'Двойной клик Правой на заголовке'
  113.        
  114.     Case $WM_NCRBUTTONDOWN
  115.         $tmp= 'Нажатие Правой на заголовке'
  116.        
  117.     Case $WM_NCRBUTTONUP
  118.         $tmp= 'Отжатие Правой на заголовке'
  119.        
  120.     Case $WM_NCMOUSEMOVE
  121.         $tmp= 'Перемещение мыши в НЕ клиентской области'
  122. #ce
  123.        
  124.     ; Case $WM_MOUSEMOVE ; слишком много лога пишет
  125.         ; $tmp= 'Перемещение мыши в клиентской области'
  126.     Case Else
  127.         $tmp = ""
  128.         WinSetTitle($Gui, '', "X: "&$X&", Y: "&$Y)
  129.         Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) ; переход к следующей цепочки хуков в очереди
  130. EndSwitch
  131. GUICtrlSetData($iEditLog, $tmp& @CRLF, 1)
  132.     ; Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) ; переход к следующей цепочки хуков в очереди
  133. EndFunc
  134.  
  135. Func Cleanup()
  136.     _WinAPI_UnhookWindowsHookEx($hHook)
  137.     DllCallbackFree($hStub_KeyProc)
  138. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement