Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Ramzesia on June 14, 2017, 11:47:47 AM

Title: как реализовать цикл?
Post by: Ramzesia on June 14, 2017, 11:47:47 AM
Как реализовать цыкл? Нужно удерживать зажатой клавишу до появления пикселя.
Что то ти по этого, но это не работает.
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (246,544, 248,546)
   COLORMODE (246,544, 248,546)
   IF_PIXEL_IN(247,545, 4194175)
      $check = 1
      KEYPRESS(#c)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC
// Продолжить скрипт
Title: Re: как реализовать цыкл?
Post by: open_78 on June 14, 2017, 11:54:08 AM
Ошибка в седьмой строке. Должно быть или:
Code: (clickermann) [Select]
IF_PIXEL_IN(246,544, 248,546, 4194175)или:
Code: (clickermann) [Select]
IF(PXL(247,545)=4194175)
Title: Re: как реализовать цыкл?
Post by: Vint on June 14, 2017, 12:41:08 PM
И вместо
Code: (clickermann) [Select]
KEYPRESS(#c)должно быть отжатие
Code: (clickermann) [Select]
KEYUP(#C)
Title: Re: как реализовать цыкл?
Post by: Oraven on June 14, 2017, 02:01:14 PM
А где уровень цветокоррекции??
Code: (clickermann) [Select]
COLORMODE (246,544, 248,546)
Title: Re: как реализовать цыкл?
Post by: open_78 on June 14, 2017, 07:43:30 PM
Как реализовать цыкл?
В слове "цыкл" ошибка. Правильно будет- ЦИКЛ.  :) ;) :D ;D
Title: Re: как реализовать цыкл?
Post by: Ramzesia on June 14, 2017, 08:54:01 PM
Не в обиду ребят, но мы вить не на уроке русского языка :) да и я спрашивал как удержать клавишу нажатой до тех пор пока пиксель не найдется.
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 6-ой строки
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(241,544, 243,546, 3851877)
      $check = 1
      KEYUP(#c)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC
// Продолжить скрипт
Title: Re: как реализовать цыкл?
Post by: Oraven on June 14, 2017, 09:18:30 PM
Вот так верно, только укажи уровень цветокоррекции
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)

$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (?,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
   END_IF
END_CYC
// Продолжить скрипт
Title: Re: как реализовать цыкл?
Post by: Ramzesia on June 14, 2017, 09:32:37 PM
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(
Title: Re: как реализовать цыкл?
Post by: open_78 on June 14, 2017, 09:35:38 PM
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(
Да что-ж там у тебя с этими зажатиями? Может так?...
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)
 
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (6,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
      KEYDOWN(#C)
   END_IF
END_CYC
// Продолжить скрипт
Title: Re: как реализовать цыкл?
Post by: Ramzesia on June 14, 2017, 09:46:15 PM
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(
Да что-ж там у тебя с этими зажатиями? Может так?...
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)
 
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (6,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
      KEYDOWN(#C)
   END_IF
END_CYC
// Продолжить скрипт
А вот так РАБОТАЕТ  :) :-* Походу я так пробовал но из за ошибки с иф пиксель не сработало. Спасибо всем огромное, пойду допиливать нюансы ) это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?
Title: Re: как реализовать цыкл?
Post by: Vint on June 15, 2017, 12:37:15 PM
А вот так РАБОТАЕТ ...это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.

Сейчас сделали многократное зажатие кнопки без отпускания KEYDOWN(#C). Но приложение может реагировать правильно и предварительно отпускать.

Твоя ошибка в том, что "зажать" клавишу это не то что ты думаешь. Это именно зажать (как бег в игре, например). При зажатии никакого автоповтора нет. Если ты ожидал как в редакторе при зажатии пишет "ccccccccccccccccc". Автоповтор - это возможности драйвера физической клавиатуры и им он реализован. Поэтому если нужно не зажатие, а многократное нажатие (или автоповтор), ты должен позаботиться об этом сам прописав в цикле.
Title: Re: как реализовать цыкл?
Post by: Ramzesia on June 19, 2017, 04:54:49 PM
А вот так РАБОТАЕТ ...это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.
Я понял тебя но не могу никак понять как зациклить, вот часть скрипта помоги правильно поставить "Зажатие С, Х"
Code: (clickermann) [Select]
for($var2=0, $var2 < 3)
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
   WAITMS(1500)
END_CYC

$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF

Вот так? Или можно, как то попроще сделать?
Code: (clickermann) [Select]
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х
WAITMS(100)

$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF
Title: Re: как реализовать цикл?
Post by: Oraven on June 19, 2017, 06:44:15 PM
Многократное написание KEYDOWN приводит к многократному нажатию этой клавиши.

Code: (clickermann) [Select]
WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

Твой скрипт в цикле будет постоянно нажимать CX
Title: Re: как реализовать цикл?
Post by: Ramzesia on June 19, 2017, 07:17:05 PM
Мне нужно что бы эти две клавиши были зажаты до тех пор пока не появится окно.

В этом случае окно висит лишнее время пока не пройдет цикл с клавишами
Code: (clickermann) [Select]
for($var2=0, $var2 < 3)
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
   WAITMS(1500)
END_CYC
 //Дальше не срабатывает сразу ждет цикл выше а окно иногда появляется раньше и висит лишние 2+/- сек
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF

Если сделать просто нажатие, то клавиши отпускаются после начала цикла поиска окна.

Code: (clickermann) [Select]
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х

$time2 = $_time_t + 10 // После этого клавиши отпускаются а картинки еще нет и рыба уходит
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC

А мне нужно следующее...
Code: (clickermann) [Select]
//Нажать клавиши и удерживать их
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
//Найти картинку и только потом отпустить их
 IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
//Отпустить клавиши
//Сделать действие если нашли
LCLICK($_return1+315, $_return2+63)
Title: Re: как реализовать цикл?
Post by: open_78 on June 19, 2017, 07:30:11 PM
ЧЁ опять не устраивает? Не пойму...
В начале вообще не надо делать зажатия.
Пиши их в блоке ELSE.
Code: (clickermann) [Select]
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(100)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC
Title: Re: как реализовать цикл?
Post by: Qwerry on June 19, 2017, 09:22:47 PM
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.
Я понял тебя но не могу никак понять как зациклить, вот часть скрипта помоги правильно поставить "Зажатие С, Х"

Если сделать просто нажатие, то клавиши отпускаются после начала цикла поиска окна.

Понял, но видимо не до конца. Попробую немножко дополнить объяснение Винта.

1. Существует реальная (физическая) клавиатура. Прежде чем сигнал от нее дойдет куда следует, он обрабатывается драйвером клавиатуры. Клавиатура дает один сигнал,иногда драйвер его видоизменяет (например превращает  сигнал от зажатой клавиши С в повторяющиеся через несколько милисекунд нажатия этой  кнопки - и ты видишь "СССССССССССС").
Quote
Автоповтор - это возможности драйвера физической клавиатуры и им он реализован.

2. Существует  некое приложение, которое ожидает, что нажатие С или Х происходит на реальной клавиатуре (т.е. ждет сигнала с клавиатуры уже обработанного драйвером клавиатуры).

 3. Но тут появляется виртуальная клавиатура, сигнал которой соответствует сигналу реальной клавиатуры, но НЕ обработанной тем драйвером.

4. Абсолютно закономерно ожидания этого приложения (и твои) иногда могут оказаться нереализованными, т.к. сигнал клавиатуры не всегда совпадает с сигналом обработанным драйвером.

5. И вот если такое происходит, чтобы все работало, тебе самому придется имитировать работу драйвера физической клавиатуры - т.е. сделать повторяющиеся через короткий промежуток времени нажатия клавиши (писать их в цикле в ELSE, как показали выше).

Вывод: скрипт делает ровно то, что ты ему скажешь - отпускания кнопки не происходит. Но у тебя приложение ожидает несколько иной сигнал.
Title: Re: как реализовать цикл?
Post by: Ramzesia on June 20, 2017, 01:32:07 PM
5. И вот если такое происходит, чтобы все работало, тебе самому придется имитировать работу драйвера физической клавиатуры - т.е. сделать повторяющиеся через короткий промежуток времени нажатия клавиши (писать их в цикле в ELSE, как показали выше).
Я понял Винта правильно и выложил свой вариант, я просил посмотреть правильно ли написал.
Code: (clickermann) [Select]
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х
WAITMS(100)
 
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC

IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF
Да и если до скрипта не писать нажатие, то через раз не работает, не знаю с чем это связано.
Title: Re: как реализовать цикл?
Post by: Oraven on June 21, 2017, 07:45:44 AM
Нет не правильно, как я уже писал KEYDOWN при втором вызове отжимает и снова зажимает клавишу.
Получается что при отсутствии Okno.bmp у тебя скрипт будет постоянно строчить по CX
Title: Re: как реализовать цикл?
Post by: Ramzesia on June 23, 2017, 12:17:18 AM

Получается что при отсутствии Okno.bmp у тебя скрипт будет постоянно строчить по CX
А разве это не отменяет вот эта часть кода?
Code: (clickermann) [Select]
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF