Что нового

Теряется контроль над колесом мыши

Tapok

Новичок
Сообщения
204
Репутация
0
Почему после нескольких правильных отрабатываний теряется контроль над колесом мыши?
Код:
Код:
#Include "MouseOnEvent.au3"

HotKeySet("{ESC}", "_Quit")
Func _Quit()
	Exit
EndFunc

_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_scroll_up", 0, 1)
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_scroll_down", 0, 1)
While 1
    Sleep(500)
WEnd
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT)
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT)
Exit

Func _scroll_up()
	If _CheckEvent("up") Then
		WinSetState("Калькулятор", "", @SW_RESTORE)
	EndIf
EndFunc

Func _scroll_down()
	If _CheckEvent("down") Then
		WinSetState("Калькулятор", "", @SW_MINIMIZE)
	EndIf
EndFunc

Func _CheckEvent($sEvent, $iDelay = 500)
    If Not IsDeclared("__LastEvent") Then _
        Global $__LastEvent[2]
    ; ---
    If $__LastEvent[0] <> $sEvent Or TimerDiff($__LastEvent[1]) > $iDelay Then
        $__LastEvent[0] = $sEvent
        $__LastEvent[1] = TimerInit()
        Return 1
    EndIf
    Return 0
EndFunc
Вместо
Код:
WinSetState("Калькулятор", "", @SW_RESTORE)

и
Код:
WinSetState("Калькулятор", "", @SW_MINIMIZE)

реальный код, запуск функции. После нескольких отрабатываний прокручивание колеса мыши не приводит к запуску функции, а возвращается прокрутка текста и т.д., как без запущенной программы, при этом exe программы запущен. В чем может быть причина и как исправить?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуйте возвращать из функций _scroll_up() и _scroll_down()
Код:
Return False
Код:
Return True



Добавлено:
Сообщение автоматически объединено:

Также помните, что функции не должны быть блокирующими и они должны вернуть управление как можно быстрее.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Сейчас минуты две гонял Калькулятор туда-обратно. Не разу не было сбоя.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
edyapd, с калькулятором все хорошо, я же написал:
Вместо
Код:
WinSetState("Калькулятор", "", @SW_RESTORE)

и
Код:
WinSetState("Калькулятор", "", @SW_MINIMIZE)

реальный код, запуск функции.

alex33, попробую
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
MouseOnEvent UDF построен на хуке. При некоторых условиях (слишком долго выполняется функция обработки события) система может выгрузить хук без какого-либо уведомления. Поэтому в большинстве случаев для мыши лучше использовать _IsPressed().
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Yashied сказал(а):
слишком долго выполняется функция обработки события

Yashied, а в _IsPressed ведь нет прокручивания колеса мыши, только нажатия?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Tapok сказал(а):
Yashied, а в _IsPressed ведь нет прокручивания колеса мыши, только нажатия?
Есть хорошая замена хуку - Raw Input Data (RID). Но боюсь, что это будет слишком сложно для вас. Если что, смотрите пример к функции _WinAPI_GetRawInputData().
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Действительно слишком сложно :scratch:, все равно спасибо, _IsPressed вполне подойдет :beer:.
 
Верх