Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] BlockInputEx и MouseClick несколько вопросов

Ответить
Настройки темы
[решено] BlockInputEx и MouseClick несколько вопросов

Аватара для r35p3ct

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


В описании к BlockInputEx написано: "2 - Block only mouse", там же в примере
;Here we block only *Mouse* input (without keyboard).
_BlockInputEx(1) В чем подвох?)
Сначала хотел использовать блокирование мышки для того, чтобы во время выполнения случайно не двинуть мышку, но при заблокированной мышке комманда MouseClick тоже не работает. Можно ли как нибудь послать клик в определенную координату и заблокировать мышку?

Отправлено: 22:40, 24-09-2009

 

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


r35p3ct, Я вот думаю, если с BlockInput и _BlockInputEx сопряжено столько проблем, то не легче ли будет использовать для мышки глобальный перехват... (как вариант конечно)
Код: Выделить весь код
#include <WinApi.au3>
#include <WindowsConstants.au3>
Global Const $MOUSE_MOVE_EVENT = 512
Global $p_MouseProc, $hMod, $hHook, $fMouseMoveBlocked

$p_MouseProc = DllCallbackRegister("HookProc","int","int;ptr;ptr")
$hMod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($p_MouseProc), $hMod, 0)

HotKeySet("{Esc}", "Quit")

HotKeySet("!0", "Click")

While 1
    Sleep(2000)
WEnd

Func Click()
    _MouseClick(685, 122)
EndFunc

;~ Процедура перехвата
Func HookProc($nCode, $wParam, $lParam)
    Local $ret
    If $nCode < 0 Then
        $ret = _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
        Return $ret
    EndIf
    ; Блокируем движение мышки если требуется:
    If $wParam = $MOUSE_MOVE_EVENT And $fMouseMoveBlocked Then Return 1
    $ret = _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Return $ret
EndFunc

Func Quit()
    Exit
EndFunc

Func OnAutoItExit()
    DllCallbackFree($p_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHook)
EndFunc

;~  При 100% занятости процессора у меня возникали проблемы с точностью работы MouseClick.
;~ Думаю, что не будет лишним, использовать MouseMove и перед кликом проверять координаты курсора и затем блокировать движение.
;~ Использование MouseMove так-же оправдывается тем, что движение мышки после блокировки будет уже невозможным
Func _MouseClick($iX, $iY)
    Local $aMouse, $i
    Do
        $i += 1 ; счетчик попыток
        If $i > 5 Then Return SetError(1)
        MouseMove($iX, $iY, 1)
        $aMouse = MouseGetPos()
        If @error Then Return SetError(2)
        Until $aMouse[0] = $iX And $aMouse[1] = $iY
    $fMouseMoveBlocked = True ; Блокировка
    Sleep(10) ; Время нахождения курсора над элементом перед щелчком.
    MouseClick("left", $iX, $iY, 1, 1)
    $fMouseMoveBlocked = False ; Разблокировка
EndFunc

-------
Создатель знает, что достиг совершенства не когда нечего добавить, а когда нечего убрать. - Антуан де Сент-Экзюпери


Отправлено: 08:33, 26-09-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Diamond:
не легче ли будет использовать для мышки глобальный перехват »
_BlockInputEx использует этот хук. Я только не понимаю смысл блокировки движения мышки перед самим кликом, всё ровно юзер может двигать мышку до клика, и помешать этому

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 10:37, 26-09-2009 | #12


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
всё ровно юзер может двигать мышку до клика, и помешать этому »
Теперь вижу, спасибо. Тогда так:
Код: Выделить весь код
Func _MouseClick($iX, $iY)
    Local $aMouse, $i
    Do
        $i += 1 ; счетчик попыток
        MouseMove($iX, $iY, 1)
        $fMouseMoveBlocked = True ; Блокируем перемещение
        $aMouse = MouseGetPos() ; Определяем координаты
        If @error Then
            $fMouseMoveBlocked = False
            Return
        EndIf
        If $aMouse[0] = $iX And $aMouse[1] = $iY Then
            Sleep(10) ; Время нахождения курсора над элементом перед щелчком.
            MouseClick("left", $iX, $iY, 1, 1)
            Sleep(10) ; ждем
            MouseUp("left") ; форсируем отжатие
            $fMouseMoveBlocked = False ; Разблокировка
            ExitLoop
        EndIf
        $fMouseMoveBlocked = False
    Until $i > 5
EndFunc
P.S. Юзер все ещё сможет случайно помешать, для большей надежности можно просто увеличить число попыток.

-------
Создатель знает, что достиг совершенства не когда нечего добавить, а когда нечего убрать. - Антуан де Сент-Экзюпери


Последний раз редактировалось Diamond, 27-09-2009 в 08:01.


Отправлено: 07:29, 27-09-2009 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] BlockInputEx и MouseClick несколько вопросов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Несколько вопросов о windows 7 7erg Microsoft Windows 7 4 16-11-2009 04:59
[решено] Несколько вопросов по профилям в AD skeletor Microsoft Windows NT/2000/2003 3 17-10-2008 15:21
HDD - [решено] Есть несколько вопросов касательно NCQ 12341234 Накопители (SSD, HDD, USB Flash) 3 15-06-2008 11:31
Разное - [решено] Несколько вопросов по лицензированию. Halfer Лицензирование продуктов Microsoft 6 23-09-2007 18:25
[решено] Несколько вопросов по журналу событий perchinka Microsoft Windows 2000/XP 4 29-04-2007 00:50




 
Переход