Что нового

Проверка прокручивания колеса мыши

And

Новичок
Сообщения
36
Репутация
0
Как создать проверку, что колесо мыши прокрутилось? В _IsPressed нет колеса мыши, все что связано с библиотекой _MouseSetOnEvent крешится, вылетает, не работает. Например код вида

Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include "MouseOnEvent.au3"

_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT,"MOUSE_WHEELSCROLLUP_EVENT",0,0)

Func MOUSE_WHEELSCROLLUP_EVENT($MOUSE_WHEELSCROLLUP_EVENT)
    MsgBox(64,"Окно", "Прокручивание скролла вверх", 3)
EndFunc

While 1
Sleep(100)
Wend


Немного не понял, как правильно написать код, чтобы работало. Т.е. я написал самый простой код, запускаю .exe - одна прокрутка вверх - всплытие окна, и сразу закрытие .exe. Любую другую функцию из _MouseSetOnEvent использую. Она или тормозит, или завершает, или вылетает с первого раза, или вылетает с нескольких раз, или работает очень точно, например двойной клик, но стоит зажать подольше кнопку - креш. Иногда просто окна с ошибками появляются. Средняя кнопка мыши вообще даже сообщение не создает, что выполнилось. Хотя большинство из них один или два раза показывают окно с результатом. Но вообще нет ни одной хотя бы немного работающей функции. Объясните пожалуйста.
 

joiner

Модератор
Локальный модератор
Сообщения
3,573
Репутация
634
Код:
#include <GUIConstantsEx.au3>

Global $u,$d
Global $Form1 = GUICreate("Form1", 266, 121, 192, 124)
Global $Label1 = GUICtrlCreateLabel("", 24, 56, 220, 17)
GUISetState()
GUIRegisterMsg(0x020A, "WM_MOUSEWHEEL")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
	Local $GSTWH = BitShift($wParam, 16)
	If $GSTWH = 120 Then
		$u +=1
		$d = 0
		GUICtrlSetData($Label1, 'Прокрутка вверх ' & $u)
	ElseIf $GSTWH = -120 Then
		$u = 0
		$d += 1
		GUICtrlSetData($Label1, 'Прокрутка вниз ' & $d)
	EndIf
EndFunc   ;==>WM_MOUSEWHEEL
 
A

Alofa

Гость
And Вы посмотрите на свой код, а затем прочтите Примечания к библиотеке MouseOnEvent.

Код:
#include <MouseOnEvent.au3>
Local $iDOWN, $iUP

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, '_MouseWheel_Events')
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, '_MouseWheel_Events')

Func _MouseWheel_Events($iEvent)
	Switch $iEvent
		Case $MOUSE_WHEELSCROLLDOWN_EVENT
			$iDOWN += 1
			ToolTip('Прокручивание колёсика ВНИЗ (' & $iDOWN & ')')
		Case $MOUSE_WHEELSCROLLUP_EVENT
			$iUP += 1
			ToolTip('Прокручивание колёсика ВВЕРХ (' & $iUP & ')')
	EndSwitch
	Return 1
EndFunc

While Sleep(100)
Wend
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
Alofa
Непонятно это. Скопировал ваш код, вставил в чистый лист, скомпилировал. Запускаю, колесик вверх или вниз - фриз несколько секунд - автоматическое завершение .exe, или появления окна с ошибкой и завершение. И никаких других действий. Пример joiner работает правильно, там более менее понятно, но как сделать например двойной щелчок или зажатие кнопки мыши или клавиатуры, при этом не создавая своего окна? Так понимаю, это требует совсем другого кода. Т.е. просто например, по аналогии с _MouseSetOnEvent, если бы она работала

Если двойное нажатие кнопки мыши или клавиатуры
Если зажатие кнопки мыши или клавиатуры
Если отжатие кнопки мыши или клавиатуры
Если количесто нажатий кнопки мыши или клавиатуры

Даже без Если было движение мыши, а только основные действия, даже без создания GUI, а просто как пример самого простого кода. Было бы удобно иметь такой список базовых проверок, используя стандартные функции, без udf.
 
A

Alofa

Гость
And сказал(а):
... Запускаю, колесик вверх или вниз - фриз несколько секунд - автоматическое завершение .exe, или появления окна с ошибкой и завершение.
And, а что я могу поделать, если вы Примечания так и не прочитали.


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

And сказал(а):
... но как сделать например двойной щелчок или зажатие кнопки мыши ...
And вспомните название этой темы, а затем прочтие пункт "В4" Правил.
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
Я прочитал примечание, что я должен из него выявить, если запускаю только один .exe вашего примера и в нем только одна библиотека #include <MouseOnEvent.au3> и нет ни MSG, ни Tolltip, который есть в вашем примере. Даже без сообщения все закрывается с ошибкой после прокручивания колеса мыши и секунд фриза.

Если бы я что-то понимал в этом всем я бы по другому формулировал и задавал вопросы. Понимаю, что во втором посте спросил несколько шире. Но может ответить на него, чтобы лишних тем не создавать? Непонятно зачем использовать udf, если можно(?) сделать проверку колеса мыши или двойное щелчок стандартными функциями.
 
A

Alofa

Гость
And сказал(а):
Я прочитал примечание, что я должен из него выявить, если запускаю только один .exe вашего примера и в нем только одна библиотека #include <MouseOnEvent.au3>
А у меня все Ok, потому что компилировал в x86 и прописал первой строкой:
Код:
#Au3Stripper_Ignore_Funcs=_MouseWheel_Events



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

And сказал(а):
... Непонятно зачем использовать udf, если можно(?) сделать проверку колеса мыши или двойное щелчок стандартными функциями.
Сама-то UDF из стандартных функций и состоит.


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

And сказал(а):
... Пример joiner работает правильно...
Этот пример работает покуда GUI-окно является активным.


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

And сказал(а):
...Но может ответить на него, чтобы лишних тем не создавать?
Встречный вопрос: а для каких целей вам это?
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
Встречный вопрос: а для каких целей вам это?
Для удобства, иметь примеры базового управления. Чтобы для любой программы (особенно с 3D сценой) настроить себе быстрое управление - клик, двойной, зажатие (замена обычным кликам), прокручивание колеса, т.к. нет его определения в _isPressed(). Т.е. без UDF, на базовом уровне который понятен для использования тем, кто только использует только стандартные функции, чтобы было больше настраиваемого контроля.

А у меня все Ok, потому что компилировал в x86 и прописал первой строкой:
#Au3Stripper_Ignore_Funcs=_MouseWheel_Events

Спасибо. Добавил эту строку, работает лучше, показывает tooltip, но через какое-то количество нажатий, завершение с ошибкой. Скомпилировал в 32 bit все работает правильно даже без строки #Au3Stripper_Ignore_Funcs=_MouseWheel_Events . Т.е. получается сложность в этом, тогда зачем нужен 64bit компилятор?
 
Верх