Показать полную графическую версию : [решено] "Отловить" нажатие дополнительных (нестандартных) кнопок мыши
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
sashadeg, пробовал это: MouseSetOnEvent - Обработка событии мышки (http://autoit-script.ru/index.php?topic=198.0)?
sashadeg
27-03-2010, 14:35
Как я понял, это для стимулирования нажатия нестандартных (как там сказано БОКОВЫХ) кнопок мыши...
Или я что-то не понял?
Можно простой пример вот такого алгоритма:
Если нажать боковую кнопку мыши, то выскочит msgbox.
Как я понял, это для стимулирования нажатия нестандартных (как там сказано БОКОВЫХ) кнопок мыши »
Для отлова.
Можно простой пример вот такого алгоритма »
Можно, но я допустил ошибку в библиотеке, для исправления нужно найти в ней:
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
у меня работало и без исправления Что делает это исправление? »
А если нажать на правую кнопку мышки? ;) Какая версия 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")
то все заработало :)
Вот только ненадолго :(
3.3.0.0 »
А на последней не пробовал?
в смысле если использовать $MOUSE_SECONDARYDOWN_EVENT? »
Нет, просто нажать на мышке :) - должно сработать, не смотря на ошибочное событие.
я попробовал обнулять в цикле »
Не нужно оно в цикле.
sashadeg
28-03-2010, 18:51
Не нужно оно в цикле. »
А где нужно? Нет, просто нажать на мышке - должно сработать, не смотря на ошибочное событие. »
а как мне это поможет? ;)
А где нужно? »
Там где я это поставил.
а как мне это поможет? »
А я не говорил что поможет, это воспроизводит багу, речь же шла о том чтобы показать в чём проблема (упомянутая выше).
sashadeg
29-03-2010, 08:01
речь же шла о том чтобы показать в чём проблема »
речь идет о том, как сделать НЕ одноразовый скрипт»
Мой вариант, работает, но не долго. Вот я и не понимаю, в чём у меня ошибка?
Я не очень разбираюсь в функциях, а если для них нет русского описания, то вообще жуть...
речь идет о том »
Цитирую:
Что делает это исправление? »
Вот об этом шла речь когда я пытался объяснить зачем кликать правой кнопкой мышки, не нужно путать вещи местами.
сделать НЕ одноразовый скрипт »
Вот рабочий пример:
#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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.