Что нового

Отслеживание цвета пикселя с задержкой и активация по удержанию.

AlexOsscr

Новичок
Сообщения
3
Репутация
0
Здравствуйте.
Не смог разобраться самостоятельно... для меня это как иероглифы написанные на воде... Для себя кое как нашел и переделал скрипт:
Код:
HotKeySet ("{Q}","_Pause" )
HotKeySet ("{W}","_NotPause")
HotKeySet("{Z}", "_Exit")
Global $Paused
Func _Pause()
$Paused = True
While $Paused
Sleep(100)
WEnd
EndFunc
Func _NotPause()
$Paused = False
EndFunc
While 1
$Variable = PixelSearch(160,410,200,420,0xFF037C)
If IsArray($Variable) = True Then
MouseClick("LEFT")
Sleep(200)
MouseClick("LEFT")
EndIf
$Variable = PixelSearch(160,900,200,910,0x8C0000)
If IsArray($Variable) = True Then
MouseClick("LEFT")
Sleep(200)
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFunc

При нахождении цвета он кликает и все вроде норм, но иногда эти цвета так быстро моргают там и в этот момент клик ненужен. Как сделать чтоб скрипт кликал если цвет на тех пикселях будет держаться допустим пол секунды или 1.5 секунды?
И еще вопрос... Ранее я уже спрашивал как сделать чтоб скрипт работал при удержании кнопки. Допустим зажал Q или W работает, отпустил не работает.
Мне дали пример и там была строчка
Код:
If _IsPressed(51, $hDLL) Then _Console(); удерживаем Q

И вот хоть убейте я ее куда только не вставлял... короче не получилось.
Помогите пожалуйста.
 

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Попробуйте так :
Код:
HotKeySet("{Z}", "_Exit")

While 1
    If _IsPressed(51, $hDLL) Then ;пока нажата Q
        ;выполняется функция _MyPixel дважды (с разными координатами и цветом пикселя)
        _MyPixel(160, 410, 200, 420, 0xFF037C, 1500)
        _MyPixel(160, 900, 200, 910, 0x8C0000, 1500)
    EndIf
    Sleep(100)
WEnd

;В Параметрах функции координаты и цвет пикселя так же , как и для PixelSearch ,
; только последний параметр - время задержки в миллисекуднах в течении которого
;должен оставаться пиксель засвечен нужным цветом
Func _MyPixel($left, $top, $right, $bottom, $color, $Delay)

    $hTimer = TimerInit()
    While TimerDiff($hTimer) < $Delay
        PixelSearch($left, $top, $right, $bottom, $color)
        If @error Then Return
        Sleep(100)
    WEnd

    MouseClick("LEFT")
    Sleep(200)
    MouseClick("LEFT")

EndFunc   ;==>_MyPixel

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
Последнее редактирование:
Автор
A

AlexOsscr

Новичок
Сообщения
3
Репутация
0
Спасибо огромное! Работает)
Добавил тока 2 строчки, а то без них ошибку выдавало.
Код:
#include <Misc.au3>
Global $hDLL = DllOpen("user32.dll")

Сообщение автоматически объединено:

И еще
Sleep(100)
убрал оба с ними тоже не хотел работать
Сообщение автоматически объединено:

Еще вопрос
Какая разница или что лучше использовать?
Код:
MouseClick("LEFT")

или
Код:
MouseDown("left")
Sleep(50)
MouseUp("left")

В принципе работает и так и так но может что то лучше?
Сообщение автоматически объединено:

И еще пара вопросов.
1) Что нужно еще добавить к этому скрипту чтоб после нахождения нужного цвета DPI мышки падал в 5 раз допустим?
2) Что надо дописать чтоб при нахождении цвета мышка перемещалась на 100 пикселей вверх?
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
В принципе работает и так и так но может что то лучше?
По умолчанию продолжительность нажатой кнопки мыши функцией "MouseClick" составляет 10 миллисекунд, но есть возможность изменить при помощи функции "AutoItSetOption " параметр "MouseClickDownDelay" , таким образом , по умолчанию разница только в продолжительности зажатой кнопки мыши при клике , если изменить параметр "MouseClickDownDelay" на 50 , то разницы не будет. Но всё же лучше для обычного клика использовать "MouseClick".
Что надо дописать чтоб при нахождении цвета мышка перемещалась на 100 пикселей вверх?
Код:
$aPos = MouseGetPos()
MouseMove($aPos[0] , $aPos[1]-100)

И еще
Sleep(100)
убрал оба с ними тоже не хотел работать
Это небольшая задержка в том случае, если нужный пиксель не найден , без этой задержки будет высокая нагрузка на процессор , желательно не убирать , а попробовать изменить в меньшую сторону.
 
Последнее редактирование:
Верх