Автор Тема: MouseOnEvent - Обработка событии мышки  (Прочитано 57935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7803

  • Автор темы
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseOnEvent - Обработка событии мышки
« Ответ #30, Отправлен: Июль 22, 2012, 23:10:02 »
ivsatel  [?]
Цитировать
почему то разница в реакции огромная
Насколько огромная, несколько секунд?

И тем более это неправильное использование, в заголовке UDF указано, что блокировать функцию события не рекомендуется.
Нужно бы это добавить в первое сообщение...


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: MouseOnEvent - Обработка событии мышки
« Ответ #30 Отправлен: Июль 22, 2012, 23:10:02 »

Оффлайн ivsatel [?]

  • Продвинутый
  • ***
  • Сообщений: 319
  • Репутация: 84
  • Пол: Мужской
    • Награды
Re: MouseOnEvent - Обработка событии мышки
« Ответ #31, Отправлен: Июль 22, 2012, 23:20:11 »
Да, секунды 3-4 перерисовывается GUI.
Исключил её использование в такой форме, а жаль, очень хорошее применение получилось бы.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7803

  • Автор темы
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseOnEvent - Обработка событии мышки
« Ответ #32, Отправлен: Июль 22, 2012, 23:38:53 »
ivsatel  [?]
Цитировать
распознавание жестов мыши
Вот так примерно (очень грубый набросок):

Код: AutoIt [Выделить]
#include "MouseOnEvent.au3"
#include "IsPressedEx.au3"

Global $a__MSG_LastMPos = -1
Global $s__MSG_Buffer = ''

 _MouseSetGesture("{Ctrl}", "Right,Up", "_Gesture_RightUp_Proc")

Sleep(10000)

Func _MouseSetGesture($sModifiers, $sGestures, $sFuncName)
    Local $aParam[3] = [$sModifiers, $sGestures, $sFuncName]
    $a__MSG_LastMPos = MouseGetPos()
    _MouseSetOnEvent($MOUSE_MOVE_EVENT, "__MouseSetGesture_Handler", 0, 0, $aParam)
EndFunc

Func __MouseSetGesture_Handler($iEvent, $aParam)
    Local $aMPos = MouseGetPos()
    Local $sModifiers, $sGestures, $sFuncName
    Local $iGesture_Left, $iGesture_Right, $iGesture_Up, $iGesture_Down
    Local $iMoved_Left, $iMoved_Right, $iMoved_Up, $iMoved_Down
   
    $sModifiers = $aParam[0]
    $sGestures = $aParam[1]
    $sFuncName = $aParam[2]
   
    If $sModifiers <> '' And Not _IsPressedEx($sModifiers) Then
        Return 0
    EndIf
   
    $aSplit_Gesture = StringSplit($sGestures, ',')
   
    $iGesture_Left = (StringInStr($sGestures, 'Left') > 0)
    $iGesture_Right = (StringInStr($sGestures, 'Right') > 0)
    $iGesture_Up = (StringInStr($sGestures, 'Up') > 0)
    $iGesture_Down = (StringInStr($sGestures, 'Down') > 0)
   
    $iMoved_Left = ($aMPos[0] < $a__MSG_LastMPos[0])
    $iMoved_Right = ($aMPos[0] > $a__MSG_LastMPos[0])
    $iMoved_Up = ($aMPos[1] < $a__MSG_LastMPos[1])
    $iMoved_Down = ($aMPos[1] > $a__MSG_LastMPos[1])
   
    $a__MSG_LastMPos = $aMPos
   
    If $iMoved_Left And $iGesture_Left Then
        $s__MSG_Buffer &= 'Left,'
    EndIf
   
    If $iMoved_Right And $iGesture_Right Then
        $s__MSG_Buffer &= 'Right,'
    EndIf
   
    If $iMoved_Up And $iGesture_Up Then
        $s__MSG_Buffer &= 'Up,'
    EndIf
   
    If $iMoved_Down And $iGesture_Down Then
        $s__MSG_Buffer &= 'Down,'
    EndIf
   
    $s__MSG_Buffer = StringRegExpReplace($s__MSG_Buffer, ',+$', '')
   
    For $i = 1 To $aSplit_Gesture[0]
        If Not StringInStr($s__MSG_Buffer, $aSplit_Gesture[$i]) Then
            Return
        EndIf
    Next
   
    $s__MSG_Buffer = ''
    Call($sFuncName)
EndFunc

Func _Gesture_RightUp_Proc()
    ToolTip('<Ctrl + Right-Up> Gesture recieved!')
EndFunc


требуется IsPressedEx UDF.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7803

  • Автор темы
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseOnEvent - Обработка событии мышки
« Ответ #33, Отправлен: Июль 22, 2012, 23:44:37 »
ivsatel  [?]
Цитировать
Исключил её использование в такой форме, а жаль
Создай глобальную переменную (например $bMouseEvent = False), задавай ей значение True при вызове события, и проверяй в главном цикле, если True то вызывай свою функцию (_Hid).
Вобщем см. как это сделано в примере «DoubleClick Monitor.au3».

Русское сообщество AutoIt

Re: MouseOnEvent - Обработка событии мышки
« Ответ #33 Отправлен: Июль 22, 2012, 23:44:37 »

Оффлайн G8888 [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
Re: MouseOnEvent - Обработка событии мышки
« Ответ #34, Отправлен: Август 05, 2012, 21:56:34 »
Дайте пожалуйста нормальный MouseOnEvent.zip, чтоб там было все, да и не забудте написать версию AutoIt'а.А то скачивал(MouseOnEvent.zip), но почему то не работает в версии 3.3.6.1

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7803

  • Автор темы
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseOnEvent - Обработка событии мышки
« Ответ #35, Отправлен: Август 05, 2012, 23:18:18 »
G8888  [?]
Цитировать
почему то не работает в версии 3.3.6.1
Примеры из архива работают, что именно не работает?

Впрочем, отвечать не нужно, аккаунт блокирован, за нарушение правил форума.

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 926
  • Репутация: 351
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #36, Отправлен: Октябрь 16, 2012, 23:05:08 »
А распознования 4 и 5 кнопок мыши отдельно так и нет?

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 926
  • Репутация: 351
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #37, Отправлен: Март 16, 2013, 00:26:36 »
Кстати, сейчас только заметил - в 1 посте ошибка в описании констант событии - "Прокручивание коллёсика" )

Русское сообщество AutoIt

Re: MouseOnEvent - Обработка событии мышки
« Ответ #37 Отправлен: Март 16, 2013, 00:26:36 »

Оффлайн RavdonikaS [?]

  • Новичок
  • *
  • Сообщений: 55
  • Репутация: 3
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #38, Отправлен: Август 11, 2013, 14:24:48 »
Кстати никто не замечал что указатель мыши если его перемещать начинает работать оч мелкими но заметными на глаз рывками
Замечал это при подключении этой MouseOnEvent.au3  и такая же ситуация с MouseTrapEvent.au3 С чем это может быть связано?

Win7 x64 Максимальная

Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #39, Отправлен: Август 11, 2013, 14:49:34 »
Цитата: RavdonikaS
оч мелкими но заметными на глаз рывками
Это из-за установки низкоуровнего хука, из-за чего скрипт срабатывает между движением мыши, и отправкой этого оповещения системе, т.к. в скрипте всякие "тяжелые" условия(if...select) и AutoIt сам по себе медленный то по этому и получается задержка между оповещениями.

Оффлайн KEO [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 0
  • Пол: Мужской
    • Награды
Скачал последнюю версию (1.9).

Создал такой скрипт:

Код: AutoIt [Выделить]
#include <MouseOnEvent.au3>

HotKeySet("{F10}","Stop")

Global $Clicking = False

_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, 'MyMouseClick') ;Обработка событий средней кнопки мыши

While 1
    Sleep(100)
WEnd


Func MyMouseClick()
    $Clicking = NOT $Clicking
    ToolTip('Clicking = ' & $Clicking,300,0)
EndFunc

Func Stop()
    Exit
EndFunc

 


При нажатии на среднюю кнопку мыши - скрипт работает отлично и ToolTip меняет свой текст как положено.

Однако при нажатии на любую другую кнопку мыши (например на основную 1 раз) - скрипт  вываливается  (Ведет себя так, как будто его закрыли или вызвали процедуру Exit).

Что я сделал не так ?  Как мне сделать, чтобы скрипт не вываливался ?

Если я правильно прочитал первый пост, то написано, что для того чтобы отключить обработку событий мыши, надо вставить соответствующие события без ссылки на функцию

То есть кроме обработки события средней кнопки мыши я вставил сразу же за ней вот эти 4 строчки.

Код: AutoIt [Выделить]
_MouseSetOnEvent($MOUSE_PRIMARYDBLCLK_EVENT)
_MouseSetOnEvent($MOUSE_SECONDARYDBLCLK_EVENT)
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT)
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT)


Не помогло. Всё равно скрипт вываливается при нажатии любой другой (кроме средней) кнопки мыши.


И кстати еще вопрос по этому пакету (MouseOnEvent):  А что это за параметр № 4 ($iBlockDefProc), который по умолчанию установлен на -1.  Что это за параметр и для чего он вообще нужен ?
« Последнее редактирование: Апрель 03, 2014, 02:33:50 от KEO »

Онлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2408
  • Репутация: 412
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #41, Отправлен: Апрель 03, 2014, 10:32:59 »
KEO  [?]
Цитировать
который по умолчанию установлен на -1
блокирует в этот момент действия мыши при клике. то есть скрипт регистрирует нажатие, но окно под указателем мыши не получает команду нажатия. чтобы разблокировать поставь  этот параметр равный 0.
твой скрипт у меня работает нормально. не вываливается
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн KEO [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: MouseOnEvent - Обработка событии мышки
« Ответ #42, Отправлен: Апрель 03, 2014, 11:25:09 »
То есть параметр "-1"  чтобы блокировать, а параметр "0" чтобы не блокировать ?

Не вываливается говоришь ? Странно... А у меня почему тогда вываливается ?  Win7 64bit (на всякий случай).

-------

Попробовал только что этот же скрипт на другом компе (на своем настольном, все библиотеки и инклуды там есть, и система такая же - Win7 64bit)  -  тоже самое.   Однако попробовал этот же скрипт на Windows XP  (которую я запустил как Виртуальную машину через VMWare)   -  там всё работает нормально, не вываливается.
Откомпилировал скрипт под x86 (и просто запускал в режиме x86, без компиляции)  - заработало отлично на Win7 64

Есть идеи в чём проблема ?
« Последнее редактирование: Апрель 03, 2014, 12:29:50 от KEO »

Онлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2408
  • Репутация: 412
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: MouseOnEvent - Обработка событии мышки
« Ответ #43, Отправлен: Апрель 03, 2014, 14:53:39 »
KEO  [?]
Цитировать
То есть параметр "-1"  чтобы блокировать, а параметр "0" чтобы не блокировать ?
Код: AutoIt [Выделить]
_MouseSetOnEvent($iEvent, $sFuncName="", $sParam1="", $sParam2="", $hTargetWnd=0, $iBlockDefProc=1)

последний параметр равен единицы. то есть блокировать. соответственно 0 - не блокировать
в твоем случае это так
Код: AutoIt [Выделить]
_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, 'MyMouseClick','','',0,0)

твой скрипт проверял на семерке х32 и х64.
не вываливается

Оффлайн KEO [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: MouseOnEvent - Обработка событии мышки
« Ответ #44, Отправлен: Апрель 03, 2014, 16:25:22 »
joiner  [?]
Цитировать
твой скрипт проверял на семерке х32 и х64. не вываливается

Ну фиг его знает, если честно.  Может моя "семерка" такая глючная.  Их же много разных билдов. Моя 7-ка одна из первых появившихся и без сервиспака. :)

В общем я запускаю скрипт в режиме x86 и все работает.  Правда есть ньюанс:  если запускать скрипт под управлением самой AutoIT - работает вообще как часы.  А если откомпилированный exe-шник -  иногда подглюкивает.

И таки-да:  напрочь не работает событие двойного нажатия средней кнопки мыши. Хотел на неё повесить свой скрипт.
$MOUSE_WHEELDBLCLK_EVENT ;Двойное нажатие средней кнопки.

Кстати, чуть позже проверю на XP.

Русское сообщество AutoIt

Re: MouseOnEvent - Обработка событии мышки
« Ответ #44 Отправлен: Апрель 03, 2014, 16:25:22 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
60 Ответов
31401 Просмотров
Последний ответ Июль 04, 2012, 15:50:30
от CreatoR
11 Ответов
9516 Просмотров
Последний ответ Март 23, 2017, 01:38:24
от CreatoR
3 Ответов
7396 Просмотров
Последний ответ Июль 10, 2010, 17:54:08
от spider_xr
8 Ответов
3672 Просмотров
Последний ответ Апрель 05, 2012, 09:40:35
от madmasles
6 Ответов
2449 Просмотров
Последний ответ Март 16, 2014, 23:06:37
от madmasles
3 Ответов
2972 Просмотров
Последний ответ Март 27, 2014, 22:01:09
от AZJIO
9 Ответов
2002 Просмотров
Последний ответ Апрель 24, 2015, 17:23:51
от Крепыш
0 Ответов
975 Просмотров
Последний ответ Апрель 02, 2015, 16:13:06
от madmasles
2 Ответов
915 Просмотров
Последний ответ Январь 10, 2016, 21:03:23
от Alofa
1 Ответов
370 Просмотров
Последний ответ Март 30, 2017, 22:22:32
от Alofa