Author Topic: Типовые алгоритмы, вводные статьи (Новички, читайте!)  (Read 329916 times)

0 Members and 2 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Просто привели пример выключения ПК из командной строки. Не все же посетители продвинутые пользователи.
При чём здесь нужен кликер или нет? Бывает спрашивают "как автоматически выключить комп после отработки скрипта?". Вот это и был ответ.

По вопросу "нельзя ли как-то названия картинок задавать строковой переменной". Можно.

Можно даже так перебирать
Code: (clickermann) [Select]
$prefix="sher"
...
...

$i=0
FOR ($i, $i<4)
   IF_PICTURE_IN (200, 200, 450, 400, STRCONCAT($prefix,$i,".bmp"))
      // обработка
   END_IF
END_CYC
« Last Edit: April 24, 2013, 08:39:28 AM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
GETSCREEN забыл

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Так это же общий пример... Намётки так сказать... Ну да, и GETSCREEN забыл до кучи  :) :D


Вуа

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Делать фор на 4 скрина не пойдет, потому как их порой делается несколько сотен, думаю решать это ожиданием, однако на мой вопрос вы ответили сполна, спасибо.

All-Seeing

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.
« Last Edit: November 29, 2013, 08:18:22 AM by Vint »

ivanuskov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.


Code: (clickermann) [Select]
while((pxlcount(0, 0, $_xmax, $_ymax, 255)<1) & ($time > $_time_t))
    waitms(100)
    getscreen
end_cyc
Будет ждать, пока на экране не появится пиксель 255 цвета и не истекло время
Чуть более длинный, но куда более продуктивный вариант

Code: (clickermann) [Select]
$flag=0
while ($flag=0)
  if_pixel_in(0, 0, $_xmax, $_ymax, 255, 256, 257, ...) //все необходимые цвета
      $flag=1
  end_if
  waitms(100)
  getscreen
end_cyc
« Last Edit: November 29, 2013, 08:17:57 AM by Vint »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.
Если прям аналог, то можно так:
Code: (clickermann) [Select]
$time = $_time_t + 30
WHILE($time > $_time_t)
   GETSCREEN
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
      $time = $_time_t - 1
   ELSE
      WAITMS (100)
   END_IF
END_CYC
« Last Edit: November 29, 2013, 08:21:34 AM by Vint »


All-Seeing

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
ivanuskov, Vint
Спасибо за содержательный и быстрый ответ  ;D

Lol

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc". Вообще изначально задача очистить буфер, эта кнопка избрана для легкого выполнения это задачи. Может быть есть возможность очистить буфер иначе, либо сделать что-то чтобы программа обрабатывала указанную клавишу.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc". Вообще изначально задача очистить буфер, эта кнопка избрана для легкого выполнения это задачи. Может быть есть возможность очистить буфер иначе, либо сделать что-то чтобы программа обрабатывала указанную клавишу.
Очистить буфер?
Code: (clickermann) [Select]
TOCLIP("")Если, конечно не используются спец проги для увеличения числа запоминаемых фрагментов.


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc".
благодаря новому механизму записи удалось выяснить что код этой кнопки внезапно оказался 44 а не тот что по документам. с остальными клавишами боюсь та же беда.
запись внезапно стала полезной.

Werest

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Здравствуйте. Подскажите как можно задать в макросе на определенные строки длительность по времени выполнения.  Ну то есть он дошел до определенной строки и начинает выполнять определенные действия определенное время, а после окончания отведенного времени макрос дальше продолжал выполняться? Возможно не внятно объяснил, приведу пример.
Code: [Select]
LCLICK(1245,180)
WAITMS(500)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("574")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("609")
WAITMS(100)
LCLICK(1025,177) 
WAIT(40)       
LCLICK(646,515) 
WAITMS(500)
LCLICK(657,507) 
WAITMS(1500)
LCLICK(618,534) 
WAIT(40)         
LCLICK(846,981)
WAITMS(500)
LCLICK(1245,180) 
WAITMS(900)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("433")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("190")
WAITMS(100)
LCLICK(1025,177)
WAIT(40)           
LCLICK(646,515) 
WAITMS(5000)
LCLICK(657,507) 
WAITMS(500)
LCLICK(618,534)
LCLICK(1245,180)
WAITMS(500)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("453")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("270")
WAITMS(100)
LCLICK(1025,177) 
WAIT(6)           
 
LCLICK(385,976)  //
WAITMS(100)      //
LCLICK(433,979)  //
WAITMS(100)      //
LCLICK(478,977)  //
WAITMS(100)      //  Нужно чтобы этот цикл длился на протяжении 20 минут

LCLICK(307,416) 
WAITMS(700)
LCLICK(646,478) 
WAIT(40)
LCLICK(561,528) 
WAIT(5)

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
while
for
операторы цикла описаны в инструкции к программе

Werest

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Ну хорошо. А как сделать то что бы он 20 минут подряд работал то?Тут нашел только функцию чтоб включался он раз в 20 минут, это немного не то.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну хорошо. А как сделать то что бы он 20 минут подряд работал то?Тут нашел только функцию чтоб включался он раз в 20 минут, это немного не то.
Ну и в чём разница то? Знак "меньше" на "больше" поменять?...
Code: (clickermann) [Select]
$end = $_time_t + 1200
WHILE($end > $_time_t)
   // Здесь твой код
END_CYC