Author Topic: Помогите сделать 30 секундный цикл  (Read 3040 times)

0 Members and 2 Guests are viewing this topic.

SAOi

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Привет всем еще раз. В прошлый раз я спрашивал, как сделать остановку скрипта, пока капча не распознается.
Сейчас у меня всё работает нормально. Но есть один косяк. Программа AGClient 1.2, иногда не отсылает капчу на сервис антигейта, просто белый квадратик и рядом надпись "отправка...", и так и не отправляется, ждал час.
Помогает лишь перезапуск программы AGClient 1.2 и повторное нажатие на "распознать".

Ниже я предоставлю код, в котором есть цикл и условия.
В цикле ищем картинку, если нашли, выполняем определённый код. Если нет, ждем 2 секунды и проверяем вновь.
Мне нужно сделать так, что бы она проверяла 30-35 секунд(через каждые 2 секунды), если данной картинки не находит то  -  закрыть программу AGClient 1.2, запустить её вновь, и нажать на "распознать."
Закрыт её и открыть я думаю что сам смогу. Подскажите как сделать интервал до 30-35 секунд??

Помогите мне пожалуйста дописать код, или толкните в правильном направлении.

Код:
Code: (clickermann) [Select]
getscreen       
WAITMS(50)
IF_PICTURE_IN (1263,634, 1353,670, "saoi.bmp")  // если вылезла капча
WAITMS(100)
BEEP(800,200)  // проиграть звук
HINTPOPUP("Íà÷èíàåòñÿ ðàñïîçíîâàíèå êàï÷è", "SAOi MESSAGE") // сообщение
$x1 = 1141   // координаты капчи
$y1 = 613   // координаты капчи
$x2 = 1256  // координаты капчи
$y2 = 669   // координаты капчи
$hwnd = wndFind("AGClient v1.2")   // ищем окно AGClient v1.2
PostMessage($hwnd, 0x555, 1, $x1)  // передаем координаты капчи в AGClient v1.2
PostMessage($hwnd, 0x555, 2, $y1)  // передаем координаты капчи в AGClient v1.2
PostMessage($hwnd, 0x555, 3, $x2)  // передаем координаты капчи в AGClient v1.2
PostMessage($hwnd, 0x555, 4, $y2) // передаем координаты капчи в AGClient v1.2
WAITMS(300)
WAITMS(100)
PostMessage($hwnd, 0x555, 5, 0)  // отсылаем распознать капчу
WAIT(1)
WAIT(1)
WAITMS(100)
//--------------------------------
while($indicator=0)       
getscreen               
if_picture_in(0,0, $_xmax,$_ymax, "cube.bmp", -1, 100) // ищем зеленый квадрат на AGClient
$indicator=1  // если нашли зеленый квадрат, меняем индикатор  с 0 на 1
LCLICK(1289,622)  // клик по полю ввода капчи
WAITMS(100)
KEYDOWN (#CTRL) // ----------------
WAITMS (30)  //------------------------------
KEYDOWN (#V) //-----------------------------------
WAITMS (50) //---------------------------------------------
KEYUP (#V)  //----------------------------------------------------  CTRL+V (вставляем капчу)
WAITMS (30) //---------------------------------------------
KEYUP (#CTRL) //-------------------------------------
WAITMS (100)  //----------------------------
KEYDOWN (#ENTER) //--------------
WAITMS (50) // ----------------
KEYUP (#ENTER) // --------
//--------------------------------
ELSE    // если не нашли
wait(2)  // ждем 2 секунды
$indicator=0 
END_IF
END_CYC
END_IF

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Помогите сделать 30 секундный цикл
« Reply #1 on: July 01, 2014, 07:00:20 AM »
задаешь время при наступлении которого проверять квадратик не имеет смысла и проверяешь в каждый проход цикла не наступил ли он
$_time_t+35 //текущее время + 35 сек
дальше попробуй сам осмыслить

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите сделать 30 секундный цикл
« Reply #2 on: July 01, 2014, 07:01:29 AM »
Можно так:
Code: (clickermann) [Select]
getscreen
WAITMS(50)
IF_PICTURE_IN (1263,634, 1353,670, "saoi.bmp")  // если вылезла капча
   WAITMS(100)
   BEEP(800,200)  // проиграть звук
   HINTPOPUP("Начинается распознование капчи", "SAOi MESSAGE") // сообщение
   $x1 = 1141   // координаты капчи
   $y1 = 613   // координаты капчи
   $x2 = 1256  // координаты капчи
   $y2 = 669   // координаты капчи
   $hwnd = wndFind("AGClient v1.2")   // ищем окно AGClient v1.2
   PostMessage($hwnd, 0x555, 1, $x1)  // передаем координаты капчи в AGClient v1.2
   PostMessage($hwnd, 0x555, 2, $y1)  // передаем координаты капчи в AGClient v1.2
   PostMessage($hwnd, 0x555, 3, $x2)  // передаем координаты капчи в AGClient v1.2
   PostMessage($hwnd, 0x555, 4, $y2) // передаем координаты капчи в AGClient v1.2
   WAITMS(300)
   WAITMS(100)
   PostMessage($hwnd, 0x555, 5, 0)  // отсылаем распознать капчу
   WAIT(1)
   WAIT(1)
   WAITMS(100)
   //--------------------------------
   $find = 0
   $time = $_time_t + 35 // ждём в течении 35 сек
   while($time > $_time_t)
      getscreen
      if_picture_in(0,0, $_xmax,$_ymax, "cube.bmp", -1, 100) // ищем зеленый квадрат на AGClient
         $time = $_time_t - 5 // если нашли зеленый квадрат, выходим
         $find = 1          // есть ответ
         LCLICK(1289,622)  // клик по полю ввода капчи
         WAITMS(100)
         KEYDOWN (#CTRL) // ----------------
         WAITMS (30)  //------------------------------
         KEYDOWN (#V) //-----------------------------------
         WAITMS (50) //---------------------------------------------
         KEYUP (#V)  //----------------------------------------------------  CTRL+V (вставляем капчу)
         WAITMS (30) //---------------------------------------------
         KEYUP (#CTRL) //-------------------------------------
         WAITMS (100)  //----------------------------
         KEYDOWN (#ENTER) //--------------
         WAITMS (50) // ----------------
         KEYUP (#ENTER) // --------
      END_IF
      wait(2)  // ждем 2 секунды
   END_CYC
   IF($find = 0)
      EXECUTE("taskkill", "/f /im AGClient.exe")
      wait(2)
      EXECUTE("C:\AGClient_v1.2\AGClient.exe")
      wait(2)
   END_IF
END_IF


SAOi

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Помогите сделать 30 секундный цикл
« Reply #3 on: July 04, 2014, 06:45:12 AM »
Долго не отвечал. работа была...

Я решил сделать через переменную, и увеличение её через INC()
Code: (clickermann) [Select]
IF_PICTURE_IN(......)
// тут код если нашли картинку
else
WAIT(2)
INC($perem,2)
IF($perem=30)
// код, если переменная равна 30-ти.
END_IF
END_IF
Всё это в цикле, каждые 2 секунды, переменная увеличивается на 2.