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

Основной раздел => Общие вопросы => Topic started by: Ramzesia on November 12, 2019, 08:29:19 PM

Title: Повтор скрипта по нескольким окнам
Post by: Ramzesia on November 12, 2019, 08:29:19 PM
Помогите еще с одной задачей, что требуется есть какой то скрип, есть 3 окна с одинаковым содержимым, окна наложены друг на друга, надо пропустить скрипт определенное количество раз по первому окну, закрыть его, повторить тоже самое по второму и так же по третьему. Если еще при запуске возможно ли указать сколько раз пробежатся по кждому окну было бы здорово.
Что то типа этого но не работает понятия не имею как это реализовать.
Code: (clickermann) [Select]
IF($first = 0)
   $first = 1
   $count = INPUTBOX("Кол-во проходов:", "1", 999)
   $count2 = $count + INPUTBOX("Кол-во проходов:", "1", 999)
   $count3 = $count2 + $count + INPUTBOX("Кол-во проходов:", "1", 999)
   IF($count = "")
      HALT
   END_IF
END_IF

// Тут мой скрипт
LOGWRITE ("скрипт")

INC($count,-1)
IF($count = 0)
   LOGWRITE ("закрыть 1 окна")
END_IF

INC($count2,-1)
IF($count = 0)
   LOGWRITE ("закрыть 2 окна")
END_IF

INC($count3,-1)
IF($count = 0)
   LOGWRITE ("закрыть 3 окна")
   halt
END_IF
Title: Re: Повтор скрипта по нескольким окнам
Post by: Космич on November 12, 2019, 09:54:12 PM
Code: (clickermann) [Select]
$arr[0] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[1] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[2] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))

$i = 0
WHILE($i < 3)
   IF($arr[$i])
      $arr[$i] = $arr[$i] - 1
      LOGWRITE ("закрыть ",  $i + 1, "окна")
   ELSE
      $i = $i + 1
   END_IF
END_CYC

HALT
Title: Re: Повтор скрипта по нескольким окнам
Post by: Ramzesia on November 13, 2019, 12:07:50 AM
Интересно, сложно, и кажется не то что мне нужно. Я так понимаю он будет при каждом заходе закрывать окно, а мне надо, указать количество проходов, для каждого окна и только потом, нужно закрыть окно. то есть, например мне надо что бы в первом окне скрипт прокрутился  700 раз после этого закрыл окно №1 во втором скажем надо 800 кругов закрыть окно №2 и.т.д
для всех 3х окон, нужны одинаковые действия, отличие только количество проходов. Так как не получается привязать к окну, то решил наложить окна друг на друга и по завершению скрипта закрыть одно проделать со вторым и третьим.
Title: Re: Повтор скрипта по нескольким окнам
Post by: Космич on November 13, 2019, 12:59:12 AM
С логированием вышла маленькая заминочка, но в остальном всё так, как ты хотел. При истинности условия совершаешь какое то действо, а при ложности закрываешь окно.
Title: Re: Повтор скрипта по нескольким окнам
Post by: Ramzesia on November 13, 2019, 09:19:43 AM
Да походу то что нужно спасибо) а можно фокус прикрутить на окно а то, начало скрипта по кликеру идет, до первого клика(
Я правильно понял куда что поставить нужно?
Code: (clickermann) [Select]
$arr[0] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[1] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[2] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))

$i = 0
WHILE($i < 3)
   IF($arr[$i])
      $arr[$i] = $arr[$i] - 1
      KEYPRESS(#A) // тут какой то скрипт
      LOGWRITE ("выполнение скрипта")
   ELSE
      LCLICK(1266,13) // закрываем окно
      WAITMS(300)
      LCLICK(863,543) // подтвердить закрытие
      WAITMS(300)
      LOGWRITE ("закрыть ",  $i + 1, "окна")
      $i = $i + 1
   END_IF
END_CYC

HALT
Title: Re: Повтор скрипта по нескольким окнам
Post by: Космич on November 13, 2019, 03:05:49 PM
Code: (clickermann) [Select]
#DEFINE WM_SYSCOMMAND: 0x0112 
#DEFINE SC_CLOSE:      0xF060

$arr[0] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[1] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))
$arr[2] = 0 + INT(INPUTBOX("Кол-во проходов:", "1", 999))

$i = 0
WHILE($i < 3) 
   SWITCH($state)
   CASE(2) // Тут действия с окном
      LOGWRITE ("Окно №", $i + 1,  "Еще проходов: ", $arr[$i])
      $arr[$i] = $arr[$i] - 1
      KEYPRESS(#A)
      $state = 1 + ($arr[$i] > 0)
   CASE(1)  // Тут завершение работы с окном
      LOGWRITE ("Завершение работы, с ",  $i + 1, " окном")
      SENDMESSAGE($hwnd, WM_SYSCOMMAND, SC_CLOSE, 0) // Закрываем окно
      $i = $i + 1
      $state = 0     
   CASE(0) // Зайдёт по 1 разу перед каждым окном
      $hwnd = HGET(INT($_xmax / 2), INT($_ymax / 2)) // Получение дескриптора окна по координатам
      WNDBUMP($hwnd) // Перевод окна на передний план
      $state = 2
   END_SWITCH
END_CYC
Title: Re: Повтор скрипта по нескольким окнам
Post by: Ramzesia on November 14, 2019, 02:35:01 PM
Спасибо за потраченное время, но я не смог разобраться в этих строках, я полный нуб в этом. Видно не судьба сделать нормально, пойду лепить 3км строчек.
Title: Re: Повтор скрипта по нескольким окнам
Post by: Ramzesia on November 15, 2019, 05:58:33 AM
Еще раз поковырялся тут, вроде разобрался, теперь возникла необходимость, если окна 2 и 3 нету что бы он работал только по одному окну, на ум приходит следующее
как это прикрутить правильно?
Code: (clickermann) [Select]
IF($arr[1] = "")
   SENDMESSAGE($hwnd, WM_SYSCOMMAND, SC_CLOSE, 0) // или в место этого, ничего не делать, пойти дальше
   IF($arr[2] = "")
      SENDMESSAGE($hwnd, WM_SYSCOMMAND, SC_CLOSE, 0) //  или в место этого, ничего не делать, пойти дальше
   END_IF
END_IFF
Title: Re: Повтор скрипта по нескольким окнам
Post by: Vint on November 15, 2019, 04:52:34 PM
Code: (clickermann) [Select]
#DEFINE WM_SYSCOMMAND: 0x0112
#DEFINE SC_CLOSE:      0xF060

// при отмене - закончить ввод
UNDEFINE($arr)
$count = 0
WHILE($count < 9999)
    $count = INT(INPUTBOX("Кол-во проходов:", "1", 9999))
    IF($count < 9999)
        ARRPUSH($arr, $count)       
    END_IF
END_CYC

$i = 0
WHILE($i < ARRSIZE($arr))
    SWITCH($state)
        CASE(2) // Тут действия с окном
            LOGWRITE ("Окно №", $i + 1,  "Еще проходов: ", $arr[$i])
            $arr[$i] = $arr[$i] - 1
            KEYPRESS(#A)
            $state = 1 + ($arr[$i] > 0)
        CASE(1)  // Тут завершение работы с окном
            LOGWRITE ("Завершение работы, с ",  $i + 1, " окном")
            SENDMESSAGE($hwnd, WM_SYSCOMMAND, SC_CLOSE, 0) // Закрываем окно
            $i = $i + 1
            $state = 0
        CASE(0) // Зайдёт по 1 разу перед каждым окном
            $hwnd = HGET(INT($_xmax / 2), INT($_ymax / 2)) // Получение дескриптора окна по координатам
            WNDBUMP($hwnd) // Перевод окна на передний план
            $state = 2
    END_SWITCH
END_CYC

ответ только на последний вопрос. Что там внутри while не разбирался.