Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] "Отловить" нажатие дополнительных (нестандартных) кнопок мыши (http://forum.oszone.net/showthread.php?t=171384)

sashadeg 27-03-2010 07:08 1378296

"Отловить" нажатие дополнительных (нестандартных) кнопок мыши
 
Здравствуйте. Хотел бы с Вами посоветоваться, как можно организовать "отлов" нестандартных кнопок мыши используя только средства Autoit. Мышь A4Tech X-710FS.
иРаньше просто устанавливал HotKeySet на какую-нибудь клавишу(например F11), а потом в ПО (программном обеспечении) от девайса ставил cтимуляцию нажатия F11, при нажатии на эту нестандартную кнопку мыши. Но это все муторно и нужен скрипт без использования дополнительного ПО.
Кстати, в игре CounterStrike в настройках управления можно установить какое-нибудь действие при нажатии на эту нестандартную кнопку. Отображается название нажатой кнопки как MOUSE3

Creat0R 27-03-2010 12:45 1378393

sashadeg, пробовал это: MouseSetOnEvent - Обработка событии мышки?

sashadeg 27-03-2010 14:35 1378441

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

Creat0R 27-03-2010 21:19 1378708

Цитата:

Цитата sashadeg
Как я понял, это для стимулирования нажатия нестандартных (как там сказано БОКОВЫХ) кнопок мыши »

Для отлова.

Цитата:

Цитата sashadeg
Можно простой пример вот такого алгоритма »

Можно, но я допустил ошибку в библиотеке, для исправления нужно найти в ней:
Код:

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 $iXButton_Pressed = 0

HotKeySet("^q", "_Quit")

_MouseSetOnEvent($MOUSE_XBUTTONUP_EVENT, "_MouseXButtonUp_Event")

While 1
    Sleep(10)

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

Func _MouseXButtonUp_Event()
    $iXButton_Pressed = 1
EndFunc

Func _Quit()
    Exit
EndFunc

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

sashadeg 28-03-2010 08:33 1378893

Цитата:

Цитата Creat0R
я допустил ошибку в библиотеке, для исправления нужно найти в ней: »

исправил. Хотя у меня работало и без исправления =) Что делает это исправление?

Цитата:

Цитата Creat0R
а вот сам пример »

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

Решил попробовать сделать НЕ одноразовый скрипт (вместо $MOUSE_XBUTTONDOWN_EVENT вписал $MOUSE_WHEELDOWN_EVENT (нажатие на ролик))
и у меня начала вылетать ошибка, после нескольких нажатий (10-20 раз)



Код:

#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 1378895

Цитата:

Цитата sashadeg
у меня работало и без исправления Что делает это исправление? »

А если нажать на правую кнопку мышки? ;) Какая версия AutoIt?

Цитата:

Цитата sashadeg
у меня начала вылетать ошибка »

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

sashadeg 28-03-2010 09:29 1378910

Цитата:

Цитата Creat0R
Какая версия AutoIt? »

3.3.0.0
Цитата:

Цитата Creat0R
А если нажать на правую кнопку мышки? »

в смысле если использовать $MOUSE_SECONDARYDOWN_EVENT?
Цитата:

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

ну я попробовал обнулять в цикле
$iXButton_Pressed = 0
и убрал EXIT после msgboxa - не помогло

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

Creat0R 28-03-2010 17:44 1379169

Цитата:

Цитата sashadeg
3.3.0.0 »

А на последней не пробовал?

Цитата:

Цитата sashadeg
в смысле если использовать $MOUSE_SECONDARYDOWN_EVENT? »

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

Цитата:

Цитата sashadeg
я попробовал обнулять в цикле »

Не нужно оно в цикле.

sashadeg 28-03-2010 18:51 1379223

Цитата:

Цитата Creat0R
Не нужно оно в цикле. »

А где нужно?
Цитата:

Цитата Creat0R
Нет, просто нажать на мышке - должно сработать, не смотря на ошибочное событие. »

а как мне это поможет? ;)

Creat0R 28-03-2010 22:41 1379384

Цитата:

Цитата sashadeg
А где нужно? »

Там где я это поставил.

Цитата:

Цитата sashadeg
а как мне это поможет? »

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

sashadeg 29-03-2010 08:01 1379556

Цитата:

Цитата Creat0R
речь же шла о том чтобы показать в чём проблема »

речь идет о том, как
Цитата:

Цитата sashadeg
сделать НЕ одноразовый скрипт»

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

Creat0R 29-03-2010 11:19 1379646

Цитата:

Цитата sashadeg
речь идет о том »

Цитирую:
Цитата:

Цитата sashadeg
Что делает это исправление? »

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

Цитата:

Цитата sashadeg
сделать НЕ одноразовый скрипт »

Вот рабочий пример:

Код:

#include <MouseSetOnEvent_UDF.au3>

HotKeySet("^q", "_Quit")

Global $iXButton_Pressed = 0
_MouseSetOnEvent($MOUSE_XBUTTONUP_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


sashadeg 29-03-2010 17:52 1380013

Цитата:

Цитата Creat0R
Вот рабочий пример: »

Спасибо, но я думаю вот так будет лучше. Потому, что с 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



Время: 15:19.

Время: 15:19.
© OSzone.net 2001-