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

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

Оффлайн CreatoR [?]

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

  • Автор темы
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #15, Отправлен: Сентябрь 11, 2010, 09:06:30 »
xklx
А возможно сделать чтобы работало для обеих боковых кнопок(левая и правая)?
Можно.


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


AutoIt is simple, subtle, elegant.


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


Мои работы

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

Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #15 Отправлен: Сентябрь 11, 2010, 09:06:30 »

Оффлайн xklx [?]

  • Новичок
  • *
  • Сообщений: 50
  • Репутация: 3
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #16, Отправлен: Сентябрь 28, 2010, 03:07:26 »
xklx
А возможно сделать чтобы работало для обеих боковых кнопок(левая и правая)?
Можно.

Не подскажешь как?
А то я сделал но у меня почему то что левая что правая одно и тоже

Оффлайн EvgeniyV [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #17, Отправлен: Январь 16, 2011, 00:57:50 »
Есть ли другой способ перехватить событие мыши?

Не знаю из-за особенностей  MouseOnEvent.au3 или моей мыши Razer, перехват срабатывает, но в играх начинаются чудеса, курсор становится практически неуправляемый.

При этом стоит задача перехватить только колесо мышки whell up\down.

Оффлайн CreatoR [?]

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

  • Автор темы
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #18, Отправлен: Январь 16, 2011, 01:18:32 »
EvgeniyV  [?]
Цитировать
перехват срабатывает, но в играх начинаются чудеса, курсор становится практически неуправляемый.
Пример?

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

Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #18 Отправлен: Январь 16, 2011, 01:18:32 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #19, Отправлен: Январь 16, 2011, 01:39:41 »
Не знаю из-за особенностей MouseOnEvent.au3 или моей мыши Razer, перехват срабатывает, но в играх начинаются чудеса, курсор становится практически неуправляемый.

Потому что в играх свой Hook на мышь, который перекрывает твой (из MouseOnEvent.au3). Отсюда и чудеса...


Думай, прежде чем говорить.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #20, Отправлен: Январь 17, 2011, 17:26:48 »
CreatoR,
Вы не могли бы показать пример, как назначить функцию на двойной клик мыши, как не пытался, у меня не получается.
Этот пример
Код: AutoIt [Выделить]
#include "MouseOnEvent.au3"

$iPaused = False

_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, "PausePlay")
Sleep(5000)
_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT)

Func PausePlay()
    $iPaused = Not $iPaused
    ConsoleWrite("Paused: " & $iPaused & @CRLF)
EndFunc   ;==>PausePlay

Прекрасно работает с любыми одиночными нажатиями, но не работает (у меня) с двойными.

Оффлайн CreatoR [?]

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

  • Автор темы
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #21, Отправлен: Январь 17, 2011, 20:31:31 »
madmasles  [?]
Цитировать
как назначить функцию на двойной клик мыши
Странно, но хук не реагирует на WM_LBUTTONDBLCLK ($MOUSE_PRIMARYDBLCLK_EVENT).
Можно обойти это примерно так (нужно ещё поиграться с параметрами):

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

Global $iPrmUp_Event = 0, $iDblClck_Timer = 0
Global $iDblClck_Delay = 300
Global $iDblClck_Event = 0

HotKeySet("^+e", "_Quit")

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_PrmUpDwn_Event", 1, "", 0, 0)
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "_PrmUpDwn_Event", 2, "", 0, 0)

While 1
    Sleep(10)
   
    If $iDblClck_Event Then
        $iDblClck_Event = 0
       
        MsgBox(64, 'Title', 'Primary Mouse Button Double Clicked.')
        ;Exit
    EndIf
WEnd

Func _PrmUpDwn_Event($iEvent)
    If $iEvent = 1 Then
        If $iPrmUp_Event = 1 And TimerDiff($iDblClck_Timer) > $iDblClck_Delay Then
            $iPrmUp_Event = 0
            $iDblClck_Event = 0
            $iDblClck_Timer = 0
        EndIf
       
        Return
    EndIf
   
    $iPrmUp_Event += 1
   
    If $iDblClck_Timer = 0 Then
        $iDblClck_Timer = TimerInit()
        Return
    EndIf
   
    If TimerDiff($iDblClck_Timer) > $iDblClck_Delay Then
        $iPrmUp_Event = 0
        $iDblClck_Event = 0
        $iDblClck_Timer = 0
        Return
    EndIf
   
    $iPrmUp_Event = 0
    $iDblClck_Event = 1
    $iDblClck_Timer = 0
EndFunc

Func _Quit()
    Exit
EndFunc

« Последнее редактирование: Январь 17, 2011, 22:41:06 от CreatoR »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #22, Отправлен: Январь 18, 2011, 01:48:54 »
CreatoR  [?]
Цитировать
Можно обойти это примерно так
Так, вроде, тоже можно:
Код: AutoIt [Выделить]
#include <Misc.au3>

HotKeySet('{Esc}', '_Exit')

Global $iCount = 0, _
        $fClick = True, _
        $iDblClick = 0, _
        $iStart = TimerInit()

While 1
    If _DblClick() Then
        _MyFunc()
    EndIf
    Sleep(20)
WEnd

Func _MyFunc()
    $iDblClick += 1
    MsgBox(64, $iDblClick, '2 click', 2)
EndFunc   ;==>_MyFunc

Func _DblClick($iWait = 250, $sKey = '01')
    If _IsPressed($sKey) Then
        If $fClick Then
            $iStart = TimerInit()
            $iCount += 1
            $fClick = False
        EndIf
    Else
        $fClick = True
    EndIf
    If TimerDiff($iStart) >= $iWait Then
        $iCount = 0
        Return False
    EndIf
    If $iCount = 2 Then Return True
EndFunc   ;==>_DblClick

Func _Exit()
    Exit
EndFunc   ;==>_Exit


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

Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #22 Отправлен: Январь 18, 2011, 01:48:54 »

Оффлайн CreatoR [?]

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

  • Автор темы
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #23, Отправлен: Январь 18, 2011, 10:17:03 »
madmasles  [?]
Цитировать
Так, вроде, тоже можно
А как оно связано с «MouseSetOnEvent»?

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #24, Отправлен: Январь 18, 2011, 13:28:19 »
CreatoR
 :-[
Я не прав. Оно никак не связано с «MouseSetOnEvent».

Оффлайн stellar [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #25, Отправлен: Январь 01, 2012, 22:27:01 »
А же как различать боковые кнопки?
Например, _IsPressed есть 'X1 mouse button' и 'X2 mouse button'.
Хочется вместо back-forward повесить на них copy-paste.

Оффлайн Dimmak [?]

  • Новичок
  • *
  • Сообщений: 172
  • Репутация: 9
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: MouseSetOnEvent - Обработка событии мышки
« Ответ #26, Отправлен: Март 26, 2012, 17:08:06 »
CreatoR
С нетерпением ждем очередное обновление, в котором распознаются обе x-mouse buttons!
 :IL_AutoIt_1:
ДОСТИЖЕНИЮ ИЗБРАННОЙ ЦЕЛИ может мешать другой вариант выбора...
  Но именно другие, ТОЧНЫЕ варианты выбора,
являются ПОСЛЕДОВАТЕЛЬНЫМИ звеньями той цепи,
которая и приводит к ДОСТИЖЕНИЮ ИЗБРАННОЙ ЦЕЛИ.

Оффлайн CreatoR [?]

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

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

Цитировать
v1.9 [22.07.2012]
* Данная версия не совместима с предыдущими!
* AutoIt 3.3.0.0 больше не поддерживается.
* Вместо параметров $sParam1 и $sParam2, теперь используется $vParam в качестве последнего опционального параметра.
* Функции события ($sFuncName), теперь в качестве первого параметра передаётся $iEvent, и $vParam в качестве второго (оба параметра опциональны).
* Теперь $iBlockDefProc по умолчанию установлен на -1 (функция события может определять, блокировать процесс события или нет, используя возврат из функции значения 1 или 0).
* Исправлены нерабочие события $MOUSE_PRIMARYDBLCLK_EVENT и $MOUSE_SECONDARYDBLCLK_EVENT,
  теперь они обрабатываются вручную, т.к окна не всегда получают эти события (зависит от стиля CS_DBLCLKS).
  (особо не тестировалось, т.ч на данный момент эти события носят ярлык "экспериментальный").
* Исправлена проблема с ошибкой "Subscript used with non-Array variable", вызвано в случае если не найдено окно с дескриптором параметра $hTargetWnd (окно закрыто).
* Обновлены примеры.

Оффлайн ivsatel [?]

  • Продвинутый
  • ***
  • Сообщений: 319
  • Репутация: 84
  • Пол: Мужской
    • Награды
Re: MouseOnEvent - Обработка событии мышки
« Ответ #28, Отправлен: Июль 22, 2012, 21:57:46 »
А возможно распознавание жестов мыши?

есть функция:
Код: AutoIt [Выделить]
Func _Hid()
    If Not WinActive($hChild_GUI) Then
        GUISetState(@SW_HIDE, $hGui)
        GUISetState(@SW_SHOW, $hChild_GUI)
        $hMenu = _GUICtrlMenu_GetSystemMenu($hChild_GUI)
        _GUICtrlMenu_DeleteMenu($hMenu, $SC_MOVE, False)
    Else
        GUISetState(@SW_SHOW, $hGui)
        GUISetState(@SW_HIDE, $hChild_GUI)
    EndIf
EndFunc
 

Горячая клавиша привязана к ней
попробовал добавить так:
Код: AutoIt [Выделить]
;;;;;;;;;;;;;;;;;;;;;;;;;

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_Hid")
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_Hid")

;;;;;;;;;;;;;;;;;;;;;;;;
 


Но почему то разница в реакции огромная. По горячей клавише быстрее гораздо.
« Последнее редактирование: Июль 22, 2012, 23:00:47 от ivsatel »

Оффлайн CreatoR [?]

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

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

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

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

 

Похожие темы

  Тема / Автор Ответов Последний ответ
60 Ответов
30968 Просмотров
Последний ответ Июль 04, 2012, 15:50:30
от CreatoR
11 Ответов
9207 Просмотров
Последний ответ Март 23, 2017, 01:38:24
от CreatoR
3 Ответов
7333 Просмотров
Последний ответ Июль 10, 2010, 17:54:08
от spider_xr
8 Ответов
3614 Просмотров
Последний ответ Апрель 05, 2012, 09:40:35
от madmasles
6 Ответов
2394 Просмотров
Последний ответ Март 16, 2014, 23:06:37
от madmasles
3 Ответов
2884 Просмотров
Последний ответ Март 27, 2014, 22:01:09
от AZJIO
9 Ответов
1918 Просмотров
Последний ответ Апрель 24, 2015, 17:23:51
от Крепыш
0 Ответов
940 Просмотров
Последний ответ Апрель 02, 2015, 16:13:06
от madmasles
2 Ответов
878 Просмотров
Последний ответ Январь 10, 2016, 21:03:23
от Alofa
1 Ответов
334 Просмотров
Последний ответ Март 30, 2017, 22:22:32
от Alofa