![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] BlockInputEx и MouseClick несколько вопросов |
|
[решено] BlockInputEx и MouseClick несколько вопросов
|
Новый участник Сообщения: 13 |
В описании к 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 |
|