Войти

Показать полную графическую версию : [решено] "Отловить" нажатие дополнительных (нестандартных) кнопок мыши


sashadeg
27-03-2010, 07:08
Здравствуйте. Хотел бы с Вами посоветоваться, как можно организовать "отлов" нестандартных кнопок мыши используя только средства Autoit. Мышь A4Tech X-710FS.
иРаньше просто устанавливал HotKeySet на какую-нибудь клавишу(например F11), а потом в ПО (программном обеспечении) от девайса ставил cтимуляцию нажатия F11, при нажатии на эту нестандартную кнопку мыши. Но это все муторно и нужен скрипт без использования дополнительного ПО.
Кстати, в игре CounterStrike в настройках управления можно установить какое-нибудь действие при нажатии на эту нестандартную кнопку. Отображается название нажатой кнопки как MOUSE3
http://s51.radikal.ru/i133/1003/1a/aeed6dc2525d.jpg

Creat0R
27-03-2010, 12:45
sashadeg, пробовал это: MouseSetOnEvent - Обработка событии мышки (http://autoit-script.ru/index.php?topic=198.0)?

sashadeg
27-03-2010, 14:35
Как я понял, это для стимулирования нажатия нестандартных (как там сказано БОКОВЫХ) кнопок мыши...
Или я что-то не понял?
Можно простой пример вот такого алгоритма:
Если нажать боковую кнопку мыши, то выскочит msgbox.

Creat0R
27-03-2010, 21:19
Как я понял, это для стимулирования нажатия нестандартных (как там сказано БОКОВЫХ) кнопок мыши »
Для отлова.

Можно простой пример вот такого алгоритма »
Можно, но я допустил ошибку в библиотеке, для исправления нужно найти в ней:
If $__MouseSetOnEvent_aEvents[$i][0] = $iEvent Or _
$__MouseSetOnEvent_aEvents[$i][0] = $iEvent+8 Or $__MouseSetOnEvent_aEvents[$i][0] = $iEvent+16 Then
и заменить на:
If $__MouseSetOnEvent_aEvents[$i][0] = $iEvent Or _
($iEvent = $MOUSE_WHEELSCROLL_EVENT And ($__MouseSetOnEvent_aEvents[$i][0] = $iEvent+8 Or $__MouseSetOnEvent_aEvents[$i][0] = $iEvent+16)) Then

а вот сам пример:

#include <MouseSetOnEvent_UDF.au3>

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $iXButton_Pressed = 0

HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)("^q", "_Quit")

_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT, "_MouseXButtonUp_Event")

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iXButton_Pressed Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', 'X Button Pressed')
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _MouseXButtonUp_Event()
$iXButton_Pressed = 1
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Quit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

P.S
Проверить негде, т.к у меня обычная мышь.

sashadeg
28-03-2010, 08:33
я допустил ошибку в библиотеке, для исправления нужно найти в ней: »
исправил. Хотя у меня работало и без исправления =) Что делает это исправление?

а вот сам пример »
Работало нормально, но когда вылетал msgbox то по нему удавалось кликнуть только раза с 15 =(
Будто он неактивный какой-то становился.
Когда изменил $MOUSE_XBUTTONUP_EVENT на $MOUSE_XBUTTONDOWN_EVENT проблема с msgbox'om отпала.
____________________________________________________________________________________________________ _________

Решил попробовать сделать НЕ одноразовый скрипт (вместо $MOUSE_XBUTTONDOWN_EVENT вписал $MOUSE_WHEELDOWN_EVENT (нажатие на ролик))
и у меня начала вылетать ошибка, после нескольких нажатий (10-20 раз)
http://s61.radikal.ru/i173/1003/e7/ca7aea9f8753t.jpg (http://s61.radikal.ru/i173/1003/e7/ca7aea9f8753.jpg)


#include <MouseSetOnEvent_UDF.au3>

Global $iXButton_Pressed = 0

_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, "_MouseXButtonUp_Event")
HotKeySet("^q", "_Quit")

While 1

$iXButton_Pressed = 0
_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, "_MouseXButtonUp_Event")

Sleep(10)

If $iXButton_Pressed Then
_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT)
MsgBox(64, 'Title', 'X Button Pressed')

EndIf
WEnd

Func _MouseXButtonUp_Event()
$iXButton_Pressed = 1
EndFunc

Func _Quit()
Exit
EndFunc

Creat0R
28-03-2010, 08:40
у меня работало и без исправления Что делает это исправление? »
А если нажать на правую кнопку мышки? ;) Какая версия AutoIt?

у меня начала вылетать ошибка »
А зачем в цикле задавать событие для кнопки?

sashadeg
28-03-2010, 09:29
Какая версия AutoIt? »
3.3.0.0
А если нажать на правую кнопку мышки? »
в смысле если использовать $MOUSE_SECONDARYDOWN_EVENT?
А зачем в цикле задавать событие для кнопки? »
ну я попробовал обнулять в цикле
$iXButton_Pressed = 0
и убрал EXIT после msgboxa - не помогло

а когда вписал в цикл ещё и
_MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, "_MouseXButtonUp_Event")
то все заработало :)
Вот только ненадолго :(

Creat0R
28-03-2010, 17:44
3.3.0.0 »
А на последней не пробовал?

в смысле если использовать $MOUSE_SECONDARYDOWN_EVENT? »
Нет, просто нажать на мышке :) - должно сработать, не смотря на ошибочное событие.

я попробовал обнулять в цикле »
Не нужно оно в цикле.

sashadeg
28-03-2010, 18:51
Не нужно оно в цикле. »
А где нужно? Нет, просто нажать на мышке - должно сработать, не смотря на ошибочное событие. »
а как мне это поможет? ;)

Creat0R
28-03-2010, 22:41
А где нужно? »
Там где я это поставил.

а как мне это поможет? »
А я не говорил что поможет, это воспроизводит багу, речь же шла о том чтобы показать в чём проблема (упомянутая выше).

sashadeg
29-03-2010, 08:01
речь же шла о том чтобы показать в чём проблема »
речь идет о том, как сделать НЕ одноразовый скрипт»

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

Creat0R
29-03-2010, 11:19
речь идет о том »

Цитирую:
Что делает это исправление? »
Вот об этом шла речь когда я пытался объяснить зачем кликать правой кнопкой мышки, не нужно путать вещи местами.

сделать НЕ одноразовый скрипт »
Вот рабочий пример:

#include <MouseSetOnEvent_UDF.au3>

HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)("^q", "_Quit")

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $iXButton_Pressed = 0
_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT, "_MouseXButtonUp_Event")

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iXButton_Pressed Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
;_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', 'X Button Pressed')
$iXButton_Pressed = 0
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _MouseXButtonUp_Event()
$iXButton_Pressed = 1
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Quit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

sashadeg
29-03-2010, 17:52
Вот рабочий пример: »
Спасибо, но я думаю вот так будет лучше. Потому, что с UP у меня все равно ни как не получалось потом кликнуть по msgbox'y, а с DOWN без проблем. ИМХО.
#include <MouseSetOnEvent_UDF.au3>

HotKeySet("^q", "_Quit")

Global $iXButton_Pressed = 0
_MouseSetOnEvent($MOUSE_XBUTTONdown_EVENT, "_MouseXButtonUp_Event")

While 1
Sleep(10)

If $iXButton_Pressed Then
;_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT)
MsgBox(64, 'Title', 'X Button Pressed')
$iXButton_Pressed = 0
EndIf
WEnd

Func _MouseXButtonUp_Event()
$iXButton_Pressed = 1
EndFunc

Func _Quit()
Exit
EndFunc




© OSzone.net 2001-2012