1

Тема: AHK: PixelGetColor и повтор скрипта

В общем являюсь законопослушным гражданином и яростным геймером. Как любой яростный законопослушный геймер я люблю читерить
Ранее я использовал в данных целях Уо Пилот, но он не удовлетворяет меня своей простотой и не надежностью. Погуглив немного, я наткнулся на АХК, а со временем и на этот форум. Покопавшись немного, почитав уже существующие темки, я так и не понял как мне решить мою проблему.
Ближе к делу! Есть некая последовательность нажатия клавиш клавиатуры и мыши, с некоторой задержкой и т.п. Тут проблем не возникло.
Проблема появилась когда понадобилось клацать на НПЦ при изменения цвета под курсором. В мануале написана команда PixelGetColor, но вот как умно ее применить, я не бум-бум

Вот приближенный листинг программы:

Numpad1::
MouseClick, left,  462,  482
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {DOWN}
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {ENTER}
sleep, 10000
MouseClick, left,  566,  798
Sleep, 1000
MouseClick, left,  640,  752
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {DOWN}
Sleep, 1000
Send, {DOWN}
Sleep, 1000
Send, {DOWN}
Sleep, 1000
Send, {DOWN}
Sleep, 1000
Send,{DOWN}
Sleep, 1000
Send,{DOWN}
Sleep, 1000
Send, {ENTER}
Sleep, 1000
Send, {ENTER}
Sleep, 2000
MouseClick, left,  485,  393
Send, {Insert}
MouseMove, 551, 130

После того как мышь была установлена в определенную область, начинается проверка на цвет под курсором мыши! Цикл должен быть бесконечным или длиться 10 минут. Если в течении 10 минут не появляется нужный мне цвет, скрипт должен быть прерван (ExitApp - подойдет).
Но если же был найден нужный мне цвет - продолжение скрипта и повтор с начала по новому кругу в бесконечном цикле.
Вот вторая половина скрипта, которая должна идти по выявлению нужного цвета:

Loop,
    {
        PixelGetColor, color, 551, 130, 0xDEBDA5, 0, Fast
        if ErrorLevel = 0    ; Это моя попытка применить оператор.
        {
        MouseClick, left,  572,  212 ;главное что бы когда был найден цвет пикселя, продолжался вот этот скрипт.
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send,{ENTER}
        Sleep 2000
        MouseClick, left,  910,  445
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        Sleep, 1000
        Send, {ENTER}
        }
    }
Sleep, 330000


F5:: Pause

И полностью все, должно повторяться n-ое количество раз.

2

Re: AHK: PixelGetColor и повтор скрипта

DaVinchi, а справку по команде PixelGetColor читать не пробовал?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: PixelGetColor и повтор скрипта

teadrinker пишет:

DaVinchi, а справку по команде PixelGetColor читать не пробовал?

Спасибо. Посмотрел. Почесал голову и дальше методом тыка пытаюсь выстрагать "Буратина"
Просто я в этом, как рыба в мазуте. Хочу, вроде и понимаю, но ничего не получается

Вот щас я хочу хотя бы понять, как мне использовать команду  PixelGetColor.
Объясните хоть это, а дальше может я и сам чего придумаю.
Заранее благодарю.

4

Re: AHK: PixelGetColor и повтор скрипта

По-моему вы спутали PixelGetColor с PixelSearch и неправильно ввели параметры команды. Для определения цвета пиксела под курсором смотрите ссылку, которую дал teadrinker.

5

Re: AHK: PixelGetColor и повтор скрипта

DaVinchi пишет:

Просто я в этом, как рыба в мазуте.

Это с таким-то ником!
PixelGetColor можно использовать так: в переменную считывается цвет пикселя с нужными координатами, затем этот цвет сравнивается с искомым. Если совпал — одно действие, не совпал — другое.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: PixelGetColor и повтор скрипта

teadrinker пишет:
DaVinchi пишет:

Просто я в этом, как рыба в мазуте.

Это с таким-то ником!
PixelGetColor можно использовать так: в переменную считывается цвет пикселя с нужными координатами, затем этот цвет сравнивается с искомым. Если совпал — одно действие, не совпал — другое.

Теоретически я и без вас это все знаю. А вот практически используя АХК не могу пременить!
Попробовал помудрить с PixelSearch. Намудрил много, но рабочего ничего.
Пробовал я мудрить что бы постоянно искал один цвет пикселя в цикле и при появлении нужного цвета, выполняли определенные манипуляции с клавиатурой и мышкой.
Пытался найти что нить полезное на офф сайте, но из-за проблем с английским... кароч ужас

7

Re: AHK: PixelGetColor и повтор скрипта

Читая следующий текст, лучше заглядывать в хелп и закреплять полученные знания.

Что бы узнать координаты под курсором мыши надо использовать.

MouseGetPos, MouseX, MouseY

В итоге X и Y координаты будут записаны в переменные  MouseX и MouseY

Что бы узнать какой цвет находится в заданных координатах надо использовать следующий код, подставив наши переменные

PixelGetColor, color, %MouseX%, %MouseY%

В переменную color будет записан RGB цвет пикселя.

Что бы сравнить найденный цвет с заданным надо использовать следующее

if color = 0xFFFFFF 
{
; тут действие, если условие верно
}
else
{
; тут действие, если условие не верно
}

Вместо  0xFFFFFF подставляете свой цвет.

Пробуйте, если не получится, выкладывайте код, который написали.

8

Re: AHK: PixelGetColor и повтор скрипта

Координаты мыши постоянны. Ее на то место ставить должен скрипт.
Получилось следующее:

Loop,
    {
    MouseMove, 458, 40
        PixelGetColor, color, 458, 40
        If (color = 0xdebda5)
    {
    MouseClick, left, 458, 40
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send,{ENTER}
    Sleep 200
    MouseClick, left, 910,  445
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    Sleep, 100
    Send, {ENTER}
    }
    Else
    {
        Sleep, 50
    }
    }

Мышь убрать с заданого места не возможно, а манипуляции не хочет делать=(
Нужный мне цвет я определял АутоИт3 Виндовс Спай. Возможно это изза этого бида?

9

Re: AHK: PixelGetColor и повтор скрипта

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

If (color = 0xdebda5)

В вашем случае color принимается за переменную, так же как и 0xdebda5, в итоге 0xdebda5 принимает пустое значение.
В моем случае (без скобок) color принимается за переменную, а то, что после равно за текст.
Если использовать скобки, то надо так

If (color = "0xdebda5")

10

Re: AHK: PixelGetColor и повтор скрипта

Убрал скобки. Лекарством не стало
Может ли быть в оконном режиме цвет один, а в полно экранном 2й? Я уже грешу на ошибку в цвете.

11

Re: AHK: PixelGetColor и повтор скрипта

InFlames пишет:

В переменную color будет записан RGB цвет пикселя.

Согласно справке — BGR. Если нужен RGB, то это нужно указать опцией:

PixelGetColor, color, %MouseX%, %MouseY%, RGB

12

Re: AHK: PixelGetColor и повтор скрипта

YMP пишет:
InFlames пишет:

В переменную color будет записан RGB цвет пикселя.

Согласно справке — BGR. Если нужен RGB, то это нужно указать опцией:

PixelGetColor, color, %MouseX%, %MouseY%, RGB

Вот так новость. Спасибо.

DaVinchi пишет:

Убрал скобки. Лекарством не стало
Может ли быть в оконном режиме цвет один, а в полно экранном 2й? Я уже грешу на ошибку в цвете.

Попробуйте

MouseGetPos, MouseX, MouseY, RGB
If color = 0xdebda5

или так

MouseGetPos, MouseX, MouseY, alt RGB
If color = 0xdebda5

или так

MouseGetPos, MouseX, MouseY, slow RGB
If color = 0xdebda5

13

Re: AHK: PixelGetColor и повтор скрипта

Что то с цветом не то. Ибо после нажатия на кнопку мыши, появляется диалоговое окно, имеющее свой цвет. Я это окно переместил в нужную мне область и скрипт заработал. Выглядит это так:

Loop,
    {
    MouseClick, left, 458, 40
    Sleep, 50
        PixelGetColor, color, 458, 40, BGR
        If color = 0xF7F7F7
    {
    MouseClick, left, 458, 40
    Sleep, 500

Теперь думаю как объединить 2 скрипта в один.

Все должно начинаться вот с этого:

Numpad1::
MouseClick, left,  334,  358
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {DOWN}
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {ENTER}
sleep, 10000
MouseClick, left,  439,  712
Sleep, 5000
MouseClick, left,  518,  651
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {DOWN}
Sleep, 500
Send, {DOWN}
Sleep, 500
Send, {DOWN}
Sleep, 500
Send, {DOWN}
Sleep, 500
Send,{DOWN}
Sleep, 500
Send, {ENTER}
Sleep, 500
Send, {ENTER}
Sleep, 2000
MouseClick, left,  366,  263
Sleep, 1000
Send, {Insert}

Далее должен идти цикл:

Loop,
    {
    MouseClick, left, 458, 40
    Sleep, 50
        PixelGetColor, color, 458, 40, BGR
        If color = 0xF7F7F7
    {
    MouseClick, left, 458, 40
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send,{ENTER}
    Sleep 500
    MouseClick, left, 760, 304
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    Sleep, 500
    Send, {ENTER}
    }
    Else
    {
        Sleep, 100
    }
    }

После выполнения условий во втором скрипте, небольшая пауза, например sleep, 330000 и снова первый скрипт. Это все должно быть в бесконечности до команды горячей клавишей.

14 (изменено: InFlames, 2010-11-05 20:50:57)

Re: AHK: PixelGetColor и повтор скрипта

Пробуйте

SetKeyDelay 500
SetMouseDelay, 0

F11:: ; запуск
   Loop ; всё в цикле
   {
        ; часть 1
        MouseClick, left,  334,  358
        Sleep, 500
        Send, {ENTER}{DOWN}{ENTER 5}
        sleep, 10000
        MouseClick, left,  439,  712
        Sleep, 5000
        MouseClick, left,  518,  651
        Sleep, 500
        Send, {ENTER}{DOWN 5}{ENTER 2}
        Sleep, 2000
        MouseClick, left,  366,  263
        Sleep, 1000
        Send, {Insert}
        
        ;часть 2
        while color <> 0xF7F7F7 ; цикл пока не найден нужный цвет
        {
                MouseClick, , 458, 40
                Sleep, 50
                PixelGetColor, color, 458, 40, BGR
                Sleep, 100
        }

        MouseClick, left, 458, 40 
        Sleep, 500
        Send, {ENTER 8}
        MouseClick, left, 760, 304
        Sleep, 500
        Send, {ENTER 4}
        
        ; пауза в конце
        sleep, 330000
   }
return

       
f12::ExitApp ; выход

15

Re: AHK: PixelGetColor и повтор скрипта

Все замечательно работает. Спасибо.
Вот тут небольшая опечатка, не все скобочки стоят:

Send, {ENTER}DOWN 5}ENTER 2

И сразу вопрос на загрузку: Между Нажатием Ентера и стрелки вниз, какой промежуток? А то по идее слипа нет, а делает с задержкой около 100мс
И еще. Сколько в мс будет 5 минут? А то уж больно цифра большая получается для меня, не получается все нули напечатать правильно

16

Re: AHK: PixelGetColor и повтор скрипта

Опечатку исправил.
Нажатие между клавишами устанавливается командой SetKeyDelay  в милисекундах.

SetKeyDelay 500

1 мс = 0.001 с
10 мс = 0.01 с
100 мс = 0.1 с
1000 мс = 1 с
10 000 мс = 10 с
60 000 мс = 1 мин

17

Re: AHK: PixelGetColor и повтор скрипта

DaVinchi пишет:
PixelGetColor, color, 458, 40, BGR

Читайте внимательнее — RGB есть опция. Ставить BGR смысла не имеет, оно и так по умолчанию. У Вас работает просто потому, что цвет проверяете симметричный — 0xF7F7F7 — что слева направо, что справа налево, один чёрт.

18

Re: AHK: PixelGetColor и повтор скрипта

YMP Я в принципе так и подумал. Просто когда экспериментировал, забыл удалить

А есть ли возможность изменить иконку в трее и запретить выводить меню по нажатию правой кнопкой мыши?

19

Re: AHK: PixelGetColor и повтор скрипта

Беда. Покрутил я, помудрил. И после многочисленных тестов нашел баг!
После нажатия Insert, не наводит в нужную часть экрана мышь, а тупо начинает клацать Enter. Уже ставил и задержку больше после нажатия Insert и т.е. Так же в самом начале скрипта, после нескольких повторов всего скрипта, нажимает Enter не 5 раз, а 4 раза. В чем может быть загвоздка?

20

Re: AHK: PixelGetColor и повтор скрипта

А зачем Insert нажимаете? Может как-то это действие можно заменить?
Что за игра?

21

Re: AHK: PixelGetColor и повтор скрипта

Убрать Инсерт никак не получится, ибо это присесть. Если не садиться, то чар будет идти к НПЦ на клацание мышкой. Игра Рагнарок Онлайн.
Самое интересное, что после первого-второго круга, начинается сначала идет первая запара - нажимает 4 раза энтер, а не 5. После этого идет сразу запара после нажатия инсерта - не дожидаясь появления нужного цвета и не доводя мышь до нужного места, производит действия дальше.

22

Re: AHK: PixelGetColor и повтор скрипта

А если вручную эти 4 цикла сделать, всё будет в порядке? В любом случае теперь решение проблемы будет зависеть от Вас, т.к. у меня нет возможности попробовать это у себя.

23

Re: AHK: PixelGetColor и повтор скрипта

Вот щас просматривал код и увидел что после запятой нет ничего, только пробел и снова заятая

while color <> 0xF7F7F7 ; цикл пока не найден нужный цвет
        {
                MouseClick, , 458, 40 ;вот тут перед координатами

Это так и должно быть?

24 (изменено: InFlames, 2010-11-06 14:16:28)

Re: AHK: PixelGetColor и повтор скрипта

Елси не указана кнопка, то по-умолчанию это левая кнопка мыши.

MouseClick, , 458, 40

аналогично

MouseClick,left , 458, 40

25

Re: AHK: PixelGetColor и повтор скрипта

Я так понимаю что если поставить команду приблезительно:

while_not color <> 0xF7F7F7

То это что то типа, если под мышкой цвет изменится в любой, но не тот, что был или не тот который указан, будет выполнено некое условие?
К примеру

while_not color <> 0xF7F7F7 ; Если цвет не такой, то ->
        {
                MouseClick, ;идет нажатие мышки

Я все правильно понял?

26 (изменено: InFlames, 2010-11-06 15:38:30)

Re: AHK: PixelGetColor и повтор скрипта

       
;--- запуск цикла while
;--- при каждом повторении проверяется условие
;--- если переменная color не равна 0xF7F7F7 
 while color <> 0xF7F7F7 
         ;--- то выполняются команды в фигрурных скобках 
        {
                MouseClick, , 458, 40
                Sleep, 50
                PixelGetColor, color, 458, 40, BGR
                Sleep, 100
        }
;--- как только условие выполнилось
;--- и color равна 0xF7F7F7, цикл while останавливается
;--- и продолжается выполнение скрипта далее

27

Re: AHK: PixelGetColor и повтор скрипта

Видимо вы меня не правильно поняли.
Если же есть команда на поиск нужного цвета, почему не может быть команды на отсутсвие этого цвета?
Ну к примеру так:

PixelGetColor, color, 458, 40, BGR
        If color = 0xF7F7F7
    {
    Sleep, 50
}
    Else
    {
        MouseClick, ,
    }

Ну тоесть он все время проверяет нужное место на заданый цвет, если же идет не совпадение, то выполняется заданое действие!

28

Re: AHK: PixelGetColor и повтор скрипта

Этот скрипт делает, то, что Вы написали тут

DaVinchi пишет:

Ну тоесть он все время проверяет нужное место на заданый цвет, если же идет не совпадение, то выполняется заданое действие!

Может я всё-таки не понимаю что-то. Объясните тогда еще раз, в каком месте и что не так работает или какое место в скрипте Вам не понятно.

29

Re: AHK: PixelGetColor и повтор скрипта

1.У меня есть черный квадрат. Через некоторое время он должен сменить цвет. Но этого цвета я не знаю и время через которое он сменит, я тоже не знаю, но знаю координаты этого квадрата. Это я не знаю как делать.


2. В самом начале топа, я пытался найти точный цвет, на точном месте. Есть некоторое место, не важно какого цвета. На этом месте должен появиться строгий цвет 0xF7F7F7, но через какое время я не знаю. Это мы уже замутили.

30

Re: AHK: PixelGetColor и повтор скрипта

Проверка этого цвета должна идти постоянно? И пока не появился этот цвет, надо выполнять определенные действия, так?
Если да, то этот скрипт именно такое и делает.
Вот наглядный пример

       
; начинаем цикл
; он будет продолжаться до тех пор, пока цвет будет не равен заданному
 while color <> 0xF7F7F7 
        {
                MouseClick, , 458, 40
                Sleep, 50
                PixelGetColor, color, 458, 40
                Sleep, 100
                Tooltip %color% ; Что бы показать, какой цвет под курсором
        }
        Tooltip ; убираем тултип
        msgbox Это сообщение появится только тогда, когда закончится цикл while`nТ.е. когда появится нужный цвет.`nНайденый цвет: %color%

;что бы выйти из скрипта
exitapp
f12::exitapp

31

Re: AHK: PixelGetColor и повтор скрипта

Проверка этого цвета должна идти постоянно? И пока не появился этот цвет, надо выполнять определенные действия, так?

Вот именно что нет.
Проверка этого цвета должна идти постоянно и пока не исчезнет этот цвет, продолжать цикл. Как только исчез - заменился любым другим, начать выполнять скрипт.

32

Re: AHK: PixelGetColor и повтор скрипта

Тогда в предыдущем скрипте "<>" заменить на "=", и цикл будет продолжаться до тех пор, пока цвет будет равен "0xF7F7F7". Как только цвет станет не равен "0xF7F7F7", цикл остановится и скрипт начнет выполнять следующие после цикла while строки.

33

Re: AHK: PixelGetColor и повтор скрипта

А как можно сделать инъекцию Reload после последнего слипа и что бы начал скрипт работать сначало?

sleep, 330000
   }
return ; где то тут релоад впендорить и что бы начал сначало работать.

Я пробовал. Релоад делается, но скрипт не начинает работать снова

34

Re: AHK: PixelGetColor и повтор скрипта

В этом посте на клавишу F11 назначен цикл loop. Так что все должно работать в цикле.
В самом начале кода вместо

F11:: ; запуск
   Loop ; всё в цикле
   {
        ; часть 1

Напишите

F11:: ; запуск
   Loop ; всё в цикле
   {
        ; часть 1
        tooltip % "Цикл №" a_index

И тогда в тултипе будет показываться номер цикла
Можно будет увидеть действительно ли тормозится на первом цикле.

35

Re: AHK: PixelGetColor и повтор скрипта

Первый цикл проходит без каких либо сюрпризов и только во втором на половине, происходит сбой и не дожидаясь появления заданного цвета заканчивает скрипт=(
Еще раз скажу, что попробовав вручную(горячими кнопками) перезагружать скрипт(Reload) и снова запускать, все работает замечательно.
Но вот как это все автоматизировать я не знаю

36

Re: AHK: PixelGetColor и повтор скрипта

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

sleep, 330000

команду

reload

37

Re: AHK: PixelGetColor и повтор скрипта

Пробовал. Релоад идет. Начинает работать скрипт сначала, но через пару нажатий Энтера останавливается=(

38

Re: AHK: PixelGetColor и повтор скрипта

Значит надо искать причину в игре, возможно меняются какие-то условия.

39

Re: AHK: PixelGetColor и повтор скрипта

Поэкспериментировав на легких скриптах с оператором Релоад увидел, что если оператор стоит внутри цикла, выполняется перезагрузка скрипта и его остановка. Если же после цикла - нормально работает весь скрипт.
Так что есть ли какой то иной способ заставить после релоада вновь запускать скрипт сначала?

40

Re: AHK: PixelGetColor и повтор скрипта

В скрипте есть секция автозагрузки: это тот код, который стоит до первого return или до первого хоткея. Это код после reload будет выполняться. А код привязанный к хоткею не будет. Для этого необходимый код поместите в секцию автовыполнения. Вот два примера: первый после reload не будет продолжать выполняться, второй будет.

numpad1::
   msgbox Это хоткей`nСейчас будет произведена перезагрузка скрипта
   reload
return

msgbox Этот msgbox никогда не появится
msgbox Это секция автовыполнения.`nДаже после перезагрузки скрипта она будет выполнена
numpad1::
msgbox А это уже хоткей`nЭто окно появится только после нажатия хоткея`nПосле перезагрузки скрипта оно не появится
return

41

Re: AHK: PixelGetColor и повтор скрипта

Так что мне нужно поставить в скрипте, что бы он автоматически запускался после релоада?

42

Re: AHK: PixelGetColor и повтор скрипта

Какой код окончательный, напишите его.

43

Re: AHK: PixelGetColor и повтор скрипта

все тот же скрипт, что обсуждаю в этом топе=)

       MouseClick, left, 760, 304
        Sleep, 500
        Send, {ENTER 4}
        
        ; пауза в конце
        sleep, 330000
   }
return

       
f12::ExitApp ; выход

44

Re: AHK: PixelGetColor и повтор скрипта

Это ведь часть скрипта? Или полный код? Нужен полный код, который надо править.

45

Re: AHK: PixelGetColor и повтор скрипта

SetKeyDelay 500
SetMouseDelay, 0

F11:: ; запуск
   Loop ; всё в цикле
   {
        ; часть 1
        MouseClick, left,  334,  358
        Sleep, 500
        Send, {ENTER}{DOWN}{ENTER 5}
        sleep, 10000
        MouseClick, left,  439,  712
        Sleep, 5000
        MouseClick, left,  518,  651
        Sleep, 500
        Send, {ENTER}{DOWN 5}{ENTER 2}
        Sleep, 2000
        MouseClick, left,  366,  263
        Sleep, 1000
        Send, {Insert}
        
        ;часть 2
        while color <> 0xF7F7F7 ; цикл пока не найден нужный цвет
        {
                MouseClick, , 458, 40
                Sleep, 50
                PixelGetColor, color, 458, 40, BGR
                Sleep, 100
        }

        MouseClick, left, 458, 40 
        Sleep, 500
        Send, {ENTER 8}
        MouseClick, left, 760, 304
        Sleep, 500
        Send, {ENTER 4}
        
        ; пауза в конце
        sleep, 330000
   }
return

       
f12::ExitApp ; выход

46

Re: AHK: PixelGetColor и повтор скрипта

Чтобы этот скрипт запускался автоматически, надо убрать строку

F11:: ; запуск

или перед ней написать

gosub F11
F11:: ; запуск

Но я бы порекомендовал довести этот скрипт до ума и разобраться, что всё таки не работает.
Я точно не знаю как делают гуру скриптинг но я предпочитаю расставлять ToolTip и MsgBOX в разныч частях скрипта для его контроля.

Напимер попробовать так

SetKeyDelay 500
SetMouseDelay, 0

F11:: ; запуск
   Loop ; всё в цикле
   {
Tooltip Начало первой части
        ; часть 1

; в этой части скрипта проблем возникать не должно,
; т.к. тут происходят только клики мыши и клавиатуры
; если есть проблемы, то надо проверять координаты
        MouseClick, left,  334,  358
        Sleep, 500
        Send, {ENTER}{DOWN}{ENTER 5}
        sleep, 10000
        MouseClick, left,  439,  712
        Sleep, 5000
        MouseClick, left,  518,  651
        Sleep, 500
        Send, {ENTER}{DOWN 5}{ENTER 2}
        Sleep, 2000
        MouseClick, left,  366,  263
        Sleep, 1000
        Send, {Insert}
Tooltip
Msgbox первая часть завершена, начинается вторая часть
        
        ;часть 2
; В начале этой части происходит ожидание нужного цвета
; А пока он не появился происходит клик мыши
        while color <> 0xF7F7F7 ; цикл пока не найден нужный цвет
        {

; если эта часть скрипта длится очень долго
; то скорее всего указан не тот цвет

                MouseClick, , 458, 40
                Sleep, 50
                PixelGetColor, color, 458, 40, BGR
                Sleep, 100
tooltip Попытка найти цвет номер %a_index%
        }

tooltip
msgbox Нужный цвет найден

; далее опять идут клики
; если что то тут не так, то надо проверять координаты

        MouseClick, left, 458, 40 
        Sleep, 500
        Send, {ENTER 8}
        MouseClick, left, 760, 304
        Sleep, 500
        Send, {ENTER 4}
        
        ; пауза в конце

settimer time, 10    ; запускаем таймер для отображения время паузы
time:=a_tickcount


        sleep, 330000

tooltip
settimer time, off
msgbox второй цикл завершен`nпервый цикл будет запущен сначала
   }
return


time:

tooltip % a_tickcount - time " ms" 
return

       
f12::ExitApp ; выход

47 (изменено: DaVinchi, 2010-11-19 23:35:58)

Re: AHK: PixelGetColor и повтор скрипта

Я немного не понял в этой части кода:

tooltip
settimer time, off
msgbox второй цикл завершен`nпервый цикл будет запущен сначала
   }
return


time:

tooltip % a_tickcount - time " ms"
return

       
f12::ExitApp ; выход

Что значит второй Тайм. Что он дает и зачем он там вообще нужен?

48

Re: AHK: PixelGetColor и повтор скрипта

Что бы запустить таймер надо написать

SetTimer, Метка, Время_в_милисек

Нужно так же написать и сам таймер, который будет исполняться

Метка:
код, который исполняется
return

Что бы остановить таймер

SetTimer, Метка, OFF

Эта часть скрипта просто для отладки, что бы увидеть сколько прошло милисекунд

49

Re: AHK: PixelGetColor и повтор скрипта

Решением стало перед первым хоткеем с эмитировать нажатие этого хоткея
Появилась проблема. Хотел понести сие чудо другу, но у него манитор другой и по этому координаты получаются совсем другими.
Вопрос: Можно ли намутить скрипт, что бы по нажатию комбинации клавиш высвечивал сообщение с координатами под мышкой.
Ну приблизительно как в этом скрепте берется цвет под мышькой:

^!z::  ; Control+Alt+Z hotkey.
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
MsgBox The color at the current cursor position is %color%.
return

50

Re: AHK: PixelGetColor и повтор скрипта

^!z::  ; Control+Alt+Z hotkey.
MouseGetPos, MouseX, MouseY
MsgBox x=%MouseX%, y=%MouseY%
return

51

Re: AHK: PixelGetColor и повтор скрипта

А у меня почему то не хотело работать. Хотя я не уверен в 100% схожести с вашим скриптом.

52

Re: AHK: PixelGetColor и повтор скрипта

Автор, суть алгоритма до боли знакома и тоже интересует :-)
Во-первых, возможно ли воспользоваться последней рабочей версией скрипта, чтобы настроить его для своих нужд без плясок с бубнами? А во-вторых, как мне видеться, это не полное решение интересующей проблемы. Хотя, в Вашем случае, может и полное. Лично я попытался бы задавать не один конкретный цвет, а диапазон цветов, если конечно это возможно. Иначе, придется очень старательно каждый раз наводить курсор на конкретную точку. Так как обычно идет не сплошная заливка, а текстура. Либо, что более предпочтительно, навести курсор приблизительно, а скрипт уже сам прочитает цвет под ним и координаты. Либо, как альтернатива, взять за основу другой алгоритм. Убрать танцы с бубнами с цветом и координатами, а сделать так, чтобы скрипт запускался, как только измениться тип курсора (то бишь, кто-то под ним оказался).
Тоько увы... я всего неделю, как узнал о существовании АХК, и знаний не хватает пока катастрофически... И как сделать поиск по диапазону цветов (если это вообще возможно), и как определить, изменился ли тип курсора...

53

Re: AHK: PixelGetColor и повтор скрипта

Скиталец пишет:

Автор, суть алгоритма до боли знакома и тоже интересует :-)
Во-первых, возможно ли воспользоваться последней рабочей версией скрипта, чтобы настроить его для своих нужд без плясок с бубнами? А во-вторых, как мне видеться, это не полное решение интересующей проблемы. Хотя, в Вашем случае, может и полное. Лично я попытался бы задавать не один конкретный цвет, а диапазон цветов, если конечно это возможно. Иначе, придется очень старательно каждый раз наводить курсор на конкретную точку. Так как обычно идет не сплошная заливка, а текстура. Либо, что более предпочтительно, навести курсор приблизительно, а скрипт уже сам прочитает цвет под ним и координаты. Либо, как альтернатива, взять за основу другой алгоритм. Убрать танцы с бубнами с цветом и координатами, а сделать так, чтобы скрипт запускался, как только измениться тип курсора (то бишь, кто-то под ним оказался).
Тоько увы... я всего неделю, как узнал о существовании АХК, и знаний не хватает пока катастрофически... И как сделать поиск по диапазону цветов (если это вообще возможно), и как определить, изменился ли тип курсора...

Про изменения курсора я подумывал, но 1 - я не знаю как это воплотить в жизнь и 2 - без бубна все равно не будет работать, т.к. античиты и т.п. усложняют жизнь любителям AHK.

Скрипт сей переписывался 100раз уже и работает практически идеально, но как всегда появилась новая идея и новые вопросы!
К примеру:
Возможно ли в одном скрипте использовать дважды PixelSearch? При этом первый раз нужно просто найти на экране нужный цвет и тыкнуть туда мышью, а второй раз, уже в цикле ожидается появление сего.
Вот приблезительно так, выглядит второй поиск PixelSearch

Loop,
        {
        PixelSearch, Px, Py, 408, 10, 651, 200, 0x0000FF
        If ErrorLevel = 0
        {
            MouseClick, left,  %Px%,  %Py%            
                    }
        else
        {
            Sleep, 200
        }
    }

54 (изменено: DaVinchi, 2011-06-19 13:20:02)

Re: AHK: PixelGetColor и повтор скрипта

И так. Уже доработав до идеальной работоспособности, появилась новая проблема. Ранее я мог сам задавать цвет пикселя который должен появится и который в итоге ищет скрипт. Сейчас такой возможности более нет.
Вот полная рабочая (до недавнего времени) версия скрипта:

SetKeyDelay 700
SetMouseDelay, 300
WinWaitActive, Окно1
CoordMode, Pixel, Screen

Sleep, 2000
     tooltip % "Запущен Скрипт №1", 1, 1
        MouseClick, left,  398,  457
        Sleep, 500
        Send, {ENTER}{DOWN}{ENTER 6}
        sleep, 10000
        MouseClick, left,  539,  932
        Sleep, 5000
            PixelSearch, Px, Py, 502, 649, 940, 933, 0x3B2A49, 5  ; тут все идеально работает
            MouseClick, left,  %Px%,  %Py%
            sleep, 500
        Send, {ENTER}{DOWN 5}{ENTER 2}
        Sleep, 3000
        MouseClick, left,  519,  284
        Sleep, 3000
-----------------------------------------------------------------------------------------------------------------------------------
                                         Часть 2   ЭТОТ ОТРЫВОК ПЕРЕСТАЛ РАБОТАТЬ ТАК КАК МНЕ НУЖНО!
        Loop,
    {
        PixelSearch, Px, Py, 437, 1, 577, 300, 0x84C5FE, 10            ;Поиск цвета2. Цвет находит, но может быть ложным, что я обойти и хочу!
        If ErrorLevel = 0
        {
            MouseClick, left,  %Px%,  %Py%
                Send, {ENTER 8}
        
    settimer time, 10    ; запускаем таймер для отображения время паузы
    time:=a_tickcount


        sleep, 330000
    ;;;Run, %A_ScriptDir%\Randomazir.exe          ;Работает отлично, просто пока не нужно.
    reload,
;;ExitApp
                    }
    else
        {
            Sleep, 200
        }
    }
    return,
                tooltip
        settimer time, off
    return


time:

tooltip % a_tickcount - time " ms", 1, 1
return


       
f12::ExitApp ; выход
F10::Pause

В общем то вопрос в следующем, как мне впихнуть в Поиск цвета2, еще один? Объясню подробнее.
Началась вторая часть, Поиск цвета2 нашел нужный ему цвет в некоем пикселе и нажало на него мышкой! Но т.к. это может быть ложный цвет(не тот объект, что надо), то ничего не произойдет, кроме как скрипт продолжит работу, не выполнив положенной на него функции! Что крайне не желательно для меня. Выходом из этой ситуации я представляю добавление второго поиска пикселя, для контроля.
К примеру приблезительно так:

------------------------------------------Часть 2----------------------------------------------

Loop,
    {
        PixelSearch1, Px, Py, 437, 1, 577, 300, 0x84C5FE, 10            ;К примеру это PixelSearch1
        If ErrorLevel = 0
        {
            MouseClick, left,  %Px%,  %Py%
                                       PixelSearch2, Px, Py, 0, 0, 100, 100, 0x0000ЕE         ;А это PixelSearch2
                              If ErrorLevel = 0
                                {
                                  Send, {ENTER 8}
                                  Sleep, 330000
                                  Reload,
                               }
                              else
        {
            Go to PixelSearch1
        }
    }
return,

Я хочу извиниться за некоторую не грамотность в коде скрипта, просто это Логическая модель скрипта, которую я не могу воплотить в жизнь, нормальным языком AHK. Буду благодарен за направление в правильное русло!

55

Re: AHK: PixelGetColor и повтор скрипта

Немного не правильно продумал. Т.к. Ложный пиксель не куда не пропадает и на него снова будет натыкаться скрипт.

------------------------------------------Часть 2----------------------------------------------

Loop,
    {
        PixelSearch1, Px, Py, 437, 1, 577, 300, 0x84C5FE, 10            ;К примеру это PixelSearch1
        If ErrorLevel = 0
        {
            MouseClick, left,  %Px%,  %Py%
                                       PixelSearchContol, Px, Py, 0, 0, 100, 100, 0x0000ЕE         ;А это PixelSearchControl, т.е. Ищет появление диалогового окна, если его нет, переходим к поиску PixelSearch2
                              If ErrorLevel = 0
                                {
                                  Send, {ENTER 8}
                                  Sleep, 330000
                                  Reload,
                               }
                              else
        {
            Go to PixelSearch2
        }
        }
        PixelSearch2, Px, Py, 437, 1, 577, 300, 0xFFFFFF, 10            ;К примеру это PixelSearch2
        If ErrorLevel = 0
        {
            MouseClick, left,  %Px%,  %Py%
                                       PixelSearchContol, Px, Py, 0, 0, 100, 100, 0x0000ЕE         ;А это PixelSearchControl, т.е. Ищет появление диалогового окна, если его нет, переходим к поиску PixelSearch2
                              If ErrorLevel = 0
                                {
                                  Send, {ENTER 8}
                                  Sleep, 330000
                                  Reload,
                               }
                              else
        {
            Go to PixelSearch1
        }
        }
    }
return,

Т.е. Если у нас появился первый цвет из PixelSearch1, скрипт нажимает на это место мышкой и ищет контрольный цвет из PixelSearchControl. Если он не находит PixelSearchControl, то переходит к поиску пикселя из PixelSearch2, находит жмет мышкой. Найдя цвет из PixelSearchContol скрипт продолжает работу и по истечению паузы перезагружается, при ошибке переходит к поиску первого пикселя PixelSearch1 и так до бесконечности.
Как? Как мне это воплотить в жизнь, что бы заработало?

56 (изменено: DaVinchi, 2011-06-24 16:38:39)

Re: AHK: PixelGetColor и повтор скрипта

Спасибо всем кто хотел помочь, но желание оставил при себе. Понял сам, что правильно искать там, где сам же и написал GoTо и GoSub

57

Re: AHK: PixelGetColor и повтор скрипта

Не хочу прослыть археологом, но проблема, с которой столкнулся автор темы для меня на днях стала актуальной.
Не знаю, как обнулить этот пресловутый PixelSearch. Может кто уже в курсе, вдруг DaVinchi уже решил проблему?
Пока что тестирую на Paint-e, заливая экран искомым цветом.

А вот, тестовый код, непосредственно:

Loop
{
GreenSearch:
    PixelSearch, x, y, 390, 380, 490, 380, 0x008000, Fast
if ErrorLevel
       Goto, RedSearch    
else
    WinActivate, ahk_exe app.exe ; активация окна
    Click 106, 65
    sleep, 10000
    continue ;

RedSearch:
    PixelSearch, x, y, 390, 380, 490, 380, 0xFF0000, Fast
if ErrorLevel
    MsgBox, %ErrorLevel%
       Goto, GreenSearch    
else
    MsgBox, %ErrorLevel%
    WinActivate, ahk_exe app.exe ; активация окна
    Click 136, 65
    sleep, 10000
    continue ;    
}

Запускаю скрипт, потом перехожу в Paint. Если заливаю пустой экран изображения зеленым искомым цветом (0x008000), то скрипт быстренько переходит в app.exe и кликает на нужную кнопку. Однако, если заливаю красным (0xFF0000) - ничего не происходит. Как заставить PixelSearch обнулиться перед поиском красного пиксел так и не понял.
Пробовал перед вторым поиском изменить ErrorLevel на 1, т.к. при нахождении пикселя он становится равным 0, но это тоже не помогло.

...
RedSearch:
        ErrorLevel:=1
    PixelSearch, x, y, 390, 380, 490, 380, 0xFF0000, Fast
if ErrorLevel
...

Надеюсь на Вашу помощь.

58

Re: AHK: PixelGetColor и повтор скрипта

Для начала, RedSearch может бесконечно долго искать синий пиксель на красном фоне.

59

Re: AHK: PixelGetColor и повтор скрипта

Irbis пишет:

Для начала, RedSearch может бесконечно долго искать синий пиксель на красном фоне.

Премного благодарен! Проблема, действительно решилась. Ведь читал где-то в документации, что там есть как режим RGB, так и режим BGR, только вот не подумал, что по-умолчанию установлен BGR.
Теперь на оба цвета реагирует как следует.
А я то уж было начал сомневаться в синтаксисе.

60

Re: AHK: PixelGetColor и повтор скрипта

Вот никак не допираю.. есть координаты пикселя, он имеет постоянный цвет (цвет 1), но после нажатия кнопки, этот пиксель приобретает другой цвет (цвет 2), как написать, чтобы скрипт выполнялся, пока пиксель имеет цвет 1, дальше шло нажатие кнопки, пиксель приобретает цвет 2, и пока он имеет цвет 2, скрипт остановился (просто на паузе), а как только пиксель снова станет цвета 1, скрипт продолжил выполняться

F3::
Send, {Numpad7}
	While color <> 623201
{		
		Sleep, 10
		PixelGetColor, color, 145, 313
}
	Send, {NumpadEnter}
return

только начал работать в AHK и уже загвоздка, досадно.. что в коде неправильно?

61

Re: AHK: PixelGetColor и повтор скрипта

col:=623201

loop
{
  Sleep, 10
  PixelGetColor, color, 145, 313
  if (color!=col and !a)
  {
    a=1
    Send, {NumpadEnter}
  }
  else if (color=col and a)
    a=
}

F3::
Send, {Numpad7}
return
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

62 (изменено: Mauer, 2016-02-02 14:37:09)

Re: AHK: PixelGetColor и повтор скрипта

Alectric
А не могли бы вы поподробнее объяснить с вашим кодом? Просто, с kemulator'ом я понял, что скорее всего не прокатит, он даже нажатие нумпада не считывает (раз за 10 попыток). Решил через BlueStacks попробовать..там через кликанья мышкой только можно. Так вот, суть та же, после клика по координатам 290, 336 появляется окошко загрузки (выбрал в нем жертвенный пиксель). В Spy он имеет цвет 0A0400, координаты 493, 318, и вот пока он имеет этот цвет, скрипт ждет (ну я так понял, просто делает постоянную проверку пикселя на цвет), как только окошко загрузки пропало (плюс небольшая задержка), кликает дальше по координатам 174, 90.

WinWait, BlueStacks App Player
WinActivate
F3::
MouseClick, Left, 290, 336
Sleep, 100
col:=0A0400

loop
{
  Sleep, 10
  PixelGetColor, color, 493, 318
  if (color!=col and !a)
  {
    a=1
    MouseClick, Left, 174, 90
  }
  else if (color=col and a)
    a=
}
return

63

Re: AHK: PixelGetColor и повтор скрипта

Mauer, предложения должны начинаться с заглавное буквы и заканчиваться знаками препинания.

64 (изменено: Alectric, 2016-02-02 17:10:49)

Re: AHK: PixelGetColor и повтор скрипта

0A0400 - это 16-ричное число, в скриптах нужно добавлять префикс - 0x0A0400. В Spy цвет указан в RGB формате (Red Green Blue), в то время как PixelGetColor по умолчанию принимает BGR, поэтому нужно указать это в доп. параметрах:


col:=0x0A0400
PixelGetColor, color, 493, 318, RGB
Mauer пишет:

поподробнее объяснить

Что именно объяснить?

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

65 (изменено: Mauer, 2016-02-02 17:38:40)

Re: AHK: PixelGetColor и повтор скрипта

Alectric
Про RGB и BGR где-то читал, но не усвоил.. Я про строчку

col:=0x0A0400

в ней указывается второй цвет, то есть который появится в окошке загрузки или который все время там находится (если никуда не кликать)?

66 (изменено: Alectric, 2016-02-02 22:13:48)

Re: AHK: PixelGetColor и повтор скрипта

Второй... Приглядись к условиям if и подумай.

Mauer пишет:

скрипт выполнялся, пока пиксель имеет цвет 1

  if (color!=col and !a) ; если текущий цвет отличается от заданного
  {
    Send, {NumpadEnter} ; выполняется нужное действие

Переменная "а" нужна только для того, чтобы каждое условие выполнялось 1 раз.

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

67

Re: AHK: PixelGetColor и повтор скрипта

Alectric
Я дуб. Все заработало, спасибо большое. Не хватало еще одной задержки. Просто сначала грешил на цвет, поэтому и спросил про строчку с цветом. И его я, кстати, тоже выбрал неправильно: нужно было увеличить задержку после клика, иначе он не сразу изменялся на нужный, ну и изменить сам цвет. Еще раз спасибо.

68 (изменено: Mauer, 2016-02-03 00:57:01)

Re: AHK: PixelGetColor и повтор скрипта

Alectric
Последний вопрос. Вот первая часть скрипта выполнилась, потом мне нужно искать цвет 0xC8AB71 по координатам 807, 343, и как только он появится в этих координатах, нажать на него. Потом снова искать этот цвет, но в других координатах, и снова нажать на него, и так далее... Можете набросать, как это будет выглядеть вместе с первой частью?

69

Re: AHK: PixelGetColor и повтор скрипта

Проще будет функцию сделать. Вечером напишу, если не опередят.

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

70 (изменено: Mauer, 2016-02-03 11:19:42)

Re: AHK: PixelGetColor и повтор скрипта

Alectric
У меня примерная мысль есть, что-то типо задать общий цикл, а координаты отдельно в переменные выписать, и потом переменные перебирать.. Или вообще сделать файл-конфиг ввода данных, где можно вписать те же координаты, количеством до бесконечности. Не знаю только: можно так или нет.

71

Re: AHK: PixelGetColor и повтор скрипта

Хмм, сейчас дошло. Не знаю, упрощение ли это задачи или усложнение. Можно сделать так: первая часть та же, а вторая может так выглядеть: есть пиксель, в нем цвет (пиксель и цвет одни и те же, но после клика цвет меняется), так вот если этот пиксель имеет заданный цвет, то кликать по таким координатам, задержка, потом снова проверка этого же пикселя на этот же цвет, если имеет, то клик уже по другим координатам, задержка, потом снова проверка, клик по третьим координатам, задержка и так далее.. Не доходит, как это объединить в одно.

72 (изменено: Alectric, 2016-02-03 17:44:42)

Re: AHK: PixelGetColor и повтор скрипта

Mauer пишет:

можно так или нет.

Можно хоть горы свернуть, было бы оборудование и время.
Вот функция:

CheckAndClick(pixelX,pixelY,color,click="",clickX="",clickY="") ; pixelX,pixelY - координаты пикселя; color - цвет; click - делать клик; clickX,clickY - координаты клика (если не указано, то клик по координатам пикселя)
{
  clickX:=clickX="" ? pixelX : clickX
  clickY:=clickY="" ? pixelY : clickY
  PixelGetColor,col,% pixelX,% pixelY,RGB
  if (color=col)
  {
    if click
      MouseClick,Left,% clickX,% clickY
    return 1
  }
}

Сейчас пример сделаю.


...


Mauer пишет:

Можно сделать так: п...

Тогда функция не нужна...


col1:=0x0A0400

WinWait, BlueStacks App Player
WinActivate

F3::
MouseClick, Left, 290, 336
Sleep, 100

loop
{
  Sleep, 10
  PixelGetColor, color, 493, 318
  if (color=col)
  {
    a+=1
    if a=1
      MouseClick, Left, 174, 90
    else if a=2
      MouseClick, Left, 1174, 190
    else if a=3
      MouseClick, Left, 74, 19
    else if a=4 ; и так далее...
      MouseClick, Left, 14, 10
    else if a=5 ; на последнем переменную нужно обнулять
    {
      MouseClick, Left, 14, 10
      a=
    }

    sleep,5000 ; задержка
  }
}
return
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

73

Re: AHK: PixelGetColor и повтор скрипта

Alectric

WinWait, BlueStacks App Player
WinActivate
F3::
MouseClick, Left, 290, 336
Sleep, 500
col1:=0x080704 ; col1 - единица точно нужна? цвет указывается тот, который должен иметь пиксель?
loop
{
  Sleep, 10
  PixelGetColor, color, 493, 318 ; координаты пикселя?
  if (color=col)
  {
    a+=1
    if a=1
      MouseClick, Left, 174, 90 ; если пиксель принимает указанный цвет, то клик?
    else if a=2
      MouseClick, Left, 174, 190
    else if a=3
      MouseClick, Left, 74, 19
    else if a=4 ; и так далее...
      MouseClick, Left, 14, 10
    else if a=5 ; на последнем переменную нужно обнулять
    {
      MouseClick, Left, 14, 10
      a=
    }

    sleep, 5000 ; задержка
  }
}
return

Извините за тупость, приболел, голова вообще не варит.

74 (изменено: becauseim, 2016-05-08 20:58:46)

Re: AHK: PixelGetColor и повтор скрипта

В момент клика должно отправляться ^!+{vk4B}, если под курсором отражен заданный цвет, а иначе отправляется сам клик (LButton) и потом уже ^!+{vk4B}. Не знаю, в чем ошибка. Кто-нибудь, отредактируйте, пожалуйста.

LButton Up::
MouseGetPos,x,y
PixelGetColor,Color,x,y
if (Color = "222222") {
	SendInput ^!+{vk4B}
}
else {
	SendInput {LButton}^!+{vk4B}
}
return

75

Re: AHK: PixelGetColor и повтор скрипта

Так должно работать:

LButton Up::
MouseGetPos,x,y
PixelGetColor,Color,x,y
if (Color = "0x222222") {
	SendInput ^!+{vk4B}
}
else {
	SendInput {LButton}^!+{vk4B}
}
return

76

Re: AHK: PixelGetColor и повтор скрипта

mafckz, спасибо, работает!

Тогда, может, подскажете еще в одном случае? Если в заданных координатах активного окна (Clip Speed / Duration) отражен черный цвет, то отправляется {Space}{Enter}, иначе, только {Enter}
Такой вариант не срабатывает:

1::
Send ^{vk52}
WinWait Clip Speed / Duration
Sleep 100
SendInput 50{Tab 3}
CoordMode, window
PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = "0x000000") {
		SendInput {Space}{Enter}
}
else {
		SendInput {Enter}
}
return

77

Re: AHK: PixelGetColor и повтор скрипта

У команды пропущен первый параметр..

CoordMode, window

78

Re: AHK: PixelGetColor и повтор скрипта

Malcev, попробовал так, не помогло.

CoordMode, Pixel, Window

79

Re: AHK: PixelGetColor и повтор скрипта

becauseim, а что это за запись такая:

if (SpeedColor = "0x000000")

Ноль здесь нужно писать просто так: 0. И без кавычек.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

80

Re: AHK: PixelGetColor и повтор скрипта

Думаю, дело в том, что PixelGetColor выдает BGR, а цвет указан в RGB.

81

Re: AHK: PixelGetColor и повтор скрипта

Malcev,

x := 0
MsgBox, % x = "0x000000"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

82

Re: AHK: PixelGetColor и повтор скрипта

Ну да, если искать черный цвет, то без разницы.

83

Re: AHK: PixelGetColor и повтор скрипта

В смысле, без разницы? Это ошибка — выражение выдаёт false.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

84 (изменено: Malcev, 2016-05-09 03:36:34)

Re: AHK: PixelGetColor и повтор скрипта

Не понимаю в чем ошибка. У меня так на черном рабочем столе черный цвет находит:

PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = 0x000000)
   msgbox found

Только сомневаюсь, что becauseim черный ищет.

85

Re: AHK: PixelGetColor и повтор скрипта

Посмотри внимательно, как у becauseim записано, и как у тебя.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

86 (изменено: Malcev, 2016-05-09 03:54:30)

Re: AHK: PixelGetColor и повтор скрипта

Ну у меня и с кавычками находит:

PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = "0x000000")
   msgbox found

87

Re: AHK: PixelGetColor и повтор скрипта

Да, точно, но вот так, например, нет:

CoordMode, Pixel
Gui, -Caption +ToolWindow
Gui, Color, black
Gui, Show, x0 y0 w200 h200
Sleep,  100
PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = "0x0")
   msgbox found

В любом случае нужно сначала как правильно попробовать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

88 (изменено: becauseim, 2016-05-09 12:29:59)

Re: AHK: PixelGetColor и повтор скрипта

Ничего не могу понять, как ни пробовал, ControlClick не происходит вне зависимости от условия.

1::
Send ^{vk52}
WinWait Clip Speed / Duration
SendInput 50
CoordMode, Pixel, Window
PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = 0x000000){
	ControlClick, x48 y194, Clip Speed / Duration
	SendInput {Enter}
}
else {
	SendInput {Enter}
}
return

Так клик работает:

1::
ControlClick, x48 y194, Clip Speed / Duration
return

Malcev, могли бы Вы проверить сценарий в Premiere Pro? По задумке, должно происходить замедление клипов вдвое со сдвигом.

89

Re: AHK: PixelGetColor и повтор скрипта

Попробуйте после ControlClick встависть небольшой Sleep.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

90

Re: AHK: PixelGetColor и повтор скрипта

У меня так работает:

1::
CoordMode, Pixel, Window
Send ^{vk52}
WinWait Clip Speed / Duration
SendInput 50
PixelGetColor, SpeedColor, 40, 190
if (SpeedColor != 0xD7D7D7) and (SpeedColor != 0xFFFFFF)
   ControlClick, x40 y190, Clip Speed / Duration
SendInput {Enter}
return

91

Re: AHK: PixelGetColor и повтор скрипта

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

+ открыть спойлер

http://puu.sh/oLwy9/b1ca69a690.gif

92

Re: AHK: PixelGetColor и повтор скрипта

Так работает:

1::
CoordMode, Pixel, Window
Send ^{vk52}
WinWait Clip Speed / Duration
SendInput 50
Sleep 100
MouseMove, 48, 194, Clip Speed / Duration
MouseGetPos,x,y
PixelGetColor, SpeedColor, x, y
if (SpeedColor = 0x0)
	ControlClick, x48 y194, Clip Speed / Duration
SendInput {Enter}
return

Стоит заменить

MouseMove, 48, 194, Clip Speed / Duration
MouseGetPos,x,y
PixelGetColor, SpeedColor, x, y

на

PixelGetColor, SpeedColor, 48, 194

- работать перестает.

В общем, можно и так оставить, но интересно, что здесь не так, как надо.

93

Re: AHK: PixelGetColor и повтор скрипта

При наведении курсора цвет у пикселя меняется.

94

Re: AHK: PixelGetColor и повтор скрипта

Malcev, извиняюсь, но не понимаю, как в данном случае смена цвета пикселя под курсором вызывает конфликт, если используя команду MouseMove, сценарий срабатывает, а иначе - нет.
Попробовал к Вашему варианту также добавить задержку, но результат тот же.

95

Re: AHK: PixelGetColor и повтор скрипта

Задержка не при чем. После MouseMove цвет пикселя меняется.

1::
PixelGetColor, SpeedColor1, 48, 194
MouseMove, 48, 194, Clip Speed / Duration
MouseGetPos,x,y
PixelGetColor, SpeedColor2, x, y
msgbox % SpeedColor1 "`n" SpeedColor2

96

Re: AHK: PixelGetColor и повтор скрипта

Malcev, спасибо! Пригляделся, действительно. Так вроде бы работает:

1:
Send ^{vk52}
WinWait Clip Speed / Duration
SendInput 50
Sleep 200
PixelGetColor, SpeedColor, 48, 194
if (SpeedColor = 0x171717)
	ControlClick, x48 y194, Clip Speed / Duration
SendInput {Enter}
return

97

Re: AHK: PixelGetColor и повтор скрипта

Malcev, кстати, если устнавить задержку менее 200, напрмиер, 100, то срабатывает через раз. Можно ли здесь заменить задержку на проверку какого-либо состояния?

98

Re: AHK: PixelGetColor и повтор скрипта

Попробуйте заменить:

SendInput 50
Sleep 200

на:

ControlSetText, Edit1, 50, Clip Speed / Duration

99

Re: AHK: PixelGetColor и повтор скрипта

Malcev, к сожалению, также требует небольшой задержки (100). Но ладно, вроде с такой задержкой пока работает стабильно. Если через некоторое время станет заметно, что работает через раз, оставлю здесь сообщение.

100 (изменено: sglasio, 2016-05-11 07:00:55)

Re: AHK: PixelGetColor и повтор скрипта

Помогите разобраться со скриптом:
Набор команд, и нужно вставить два блока, что бы было так...
АХК посылает клавишу
потом другую, начинается блок поиска пикселя (в полосочке у нпц моба)
как только пиксель найден, посылается клавиша.
Далее весь скрипт с начала.

Параллельно основному скрипту, блок мониторинга жизней у персонажа, если появляется пиксель (в обозначенной области) то приостанавливает предыдущий скрипт и посылает ряд клавиш... после чего возобнавляет скрипт.

Вот что у меня пока что получилось:


WinActivate название с игрой
Send, {7}
SetKeyDelay, 500
Send, {0}
SetKeyDelay, 500
Loop
{
  PixelSearch, Px, Py, 479, 460, 865, 463, 0x0D0F74, 3, Fast BGR
  If ErrorLevel
{
    Send, {7}
SetKeyDelay, 300
    Send, {0}
}
else
 {
   Send, {9}
  }
  }
  return 

Есть вполне работающий скрипт с UOPilot, но он затействует только мышь, а я хочу оставить мышь в покое и использовать только посыл клавиш.


wait 4s // тут просто программа ждет пока я разверну окно с игрой
kleft 798, 152 abs // это нажатия мышкой (их я заменю посылом клавиш)
wait 1000
kLeft 903, 151 abs
wait 1000
set $b 0
[b]while $a > 1  \\блок поиска пикселя
set $a findcolor (743, 432  862, 446  1 1 855924  %arr 2)
end_while
set $a 0
while $a < 1
set $a findcolor (743, 432  862, 446  1 1 855924  %arr 2)
end_while[/b]
kLeft 830, 152 abs
wait 500
kLeft 830, 152 abs

Параллельно работает второй скрипт на самолечение


if_not 645, 852    38112
    pause_script 0
   repeat 3
   kleft 566, 137 abs
   end_repeat
   wait 1000
   kLeft 674, 171 abs
   wait 500
   kLeft 721, 143 abs
   resume_script 0
end_if