Что нового

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

AlexOsscr

Новичок
Сообщения
6
Репутация
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,165
Репутация
246
Попробуйте так :
Код:
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

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

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

AlexOsscr

Новичок
Сообщения
6
Репутация
0
Здравствуйте.
Спустя 3 года нашел свою темку)
БЕДА!
Переустановил винду с 10 на 11 и все... не хочет скрипт работать... использовал в первоначальном виде как в шапке.
Идей вообще никаких нет что нужно сделать чтоб скрипт опять заработал...
Еще заметил, в трее кликаю правой кнопкой чтоб вылезло контекстное меню и там завершить работу скрипта/программы... после нажатия ПКМ нужно подождать секунд 7-10, а иногда и дольше чтоб вылезло меню...
P.S. Пробывал запустить на рабочем столе, браузере, просмотр картинок и еще пару мелких прог(сменил цвет на серый и открывал картинки или запускал приложения где есть такой цвет) скрипт срабатывает. А запускаю игру... Все настройки в игре как и были... запускаю в окне на весь экран... пробывал и просто в окне... корректировал цвет(даже просто FFFFFF и 000000 ставил и открывал меню)... не хочет работать...
Сообщение автоматически объединено:

Еще хотел спросить пару вопросов:
1. Как заставить работать скрипт когда на переднем плане игра в полноэкранном режиме?
2. Можно как то установить разброс цветов или погрешность? Не могу правильно сформулировать... ну типа вот это желтый FBFF00 и вот это E0E400 желтый только другой оттенок... Как сделать чтоб скрипт срабатывал на все оттенки желтого или оранжевого?
Сообщение автоматически объединено:

p.s. Кажется "проблема" в той игре в которой я пытаюсь запустить этот скрипт. Хоть в настройках игры ставлю "Оконный без рамки" игра все равно запускается в полноэкранном режиме... Ну и собственно вопрос как заставить скрипт работать в приложении которое запущено в полноэкранном режиме?
 
Последнее редактирование:
Верх