|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] BlockInputEx и MouseClick несколько вопросов |
|
[решено] BlockInputEx и MouseClick несколько вопросов
|
Новый участник Сообщения: 13 |
Профиль | Отправить PM | Цитировать В описании к BlockInputEx написано: "2 - Block only mouse", там же в примере
;Here we block only *Mouse* input (without keyboard). _BlockInputEx(1) В чем подвох?) Сначала хотел использовать блокирование мышки для того, чтобы во время выполнения случайно не двинуть мышку, но при заблокированной мышке комманда MouseClick тоже не работает. Можно ли как нибудь послать клик в определенную координату и заблокировать мышку? |
|
Отправлено: 22:40, 24-09-2009 |
Пользователь Сообщения: 135
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Diamond:
|
|
------- Отправлено: 10:37, 26-09-2009 | #12 |
Пользователь Сообщения: 135
|
Профиль | Отправить 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 |
|
------- Последний раз редактировалось Diamond, 27-09-2009 в 08:01. Отправлено: 07:29, 27-09-2009 | #13 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Несколько вопросов о 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 |
|