Author Topic: Товарищи - суть в том... (срочное)  (Read 8737 times)

0 Members and 1 Guest are viewing this topic.

Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Товарищи - суть в том... (срочное)
« on: May 03, 2017, 06:13:35 PM »
Мне 23. 2 дочки близняшки (4 месяца). Нужда в деньгах, стараюсь максимально увеличить доход. Прошу помочь в написание скриптов, ибо на работе зашиваюсь. Уважаю ваше личное время, по этому ответьте пожалуйста кто на что сможет.

Можно ли, и если да,  то как создать окно выбора на 4 варианта, с ожиданием выбора от меня?

Файл txt в папке со скриптом. Нужно зайти в этот txt файл , вырезать последних 100 строк и сохранить измененным. Как реализовать?

Может ли SUB работать автономно(параллельно) от основного скрипта?

Некое окно, привязанное. Пытаюсь закрыть через KEYDOWN(#ALT) / WAITMS(50) / KEYPRESS(#F4) / KEYUP(#ALT), донт ворк. Пытался по области через LCLICK закрыть - тот же игнор, одно из значение опознает как (Х,-ХХ). Как быть?

Есть программа на основе Java. открываю, привязываю, отмечаю варианты, все гуд. А когда перехожу в некое окно где нужно вставить текст - команда выделения, вставки, мышь не реагируют. Пробовал через буквы, пробовал через винАпи. Бездыханно.
Что посоветуете?
« Last Edit: May 03, 2017, 07:34:42 PM by Loginow »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #1 on: May 03, 2017, 07:51:19 PM »
Можно ли, и если да,  то как создать окно выбора на 4 варианта, с ожиданием выбора от меня?

Code: (clickermann) [Select]
$res = RADIOBOX("Выберете пункт", "Вариант 1", "Вариант 2", "Вариант 3", "Вариант 4")
SWITCH($res)
CASE(1)
LOGWRITE ("Выбран пункт 1")

CASE(3)
LOGWRITE ("Выбран пункт 2")

CASE(3)
LOGWRITE ("Выбран пункт 3")

CASE(4)
LOGWRITE ("Выбран пункт 4")

DEFAULT
END_SWITCH

Файл txt в папке со скриптом. Нужно зайти в этот txt файл , вырезать последних 100 строк и сохранить измененным. Как реализовать?

Code: (clickermann) [Select]
TFREADARR("file.txt", $arr)
FOR($a=100,$a<ARRSIZE($arr))
   ARRPUSH($arr2, $arr[$a])
END_CYC
TFWRITEARR("file.txt", $arr2)
UNDEFINE($arr)
UNDEFINE($arr2)
HALT

Может ли SUB работать автономно(параллельно) от основного скрипта?

Для этого придуманы потоки
Code: (clickermann) [Select]
THREAD(name, 1)
   // тело
END_THREAD
Если используется подпрограмма то вызов не пойдет за пределы потока, описание должно быть внутри потока.
Также потоки имеют слабую изоляцию, надо иметь ввиду.

Некое окно, привязанное. Пытаюсь закрыть через KEYDOWN(#ALT) / WAITMS(50) / KEYPRESS(#F4) / KEYUP(#ALT), донт ворк. Пытался по области через LCLICK закрыть - тот же игнор, одно из значение опознает как (Х,-ХХ). Как быть?

В режиме привязки не работают зажатия клавиш.
Можно закрыть через SENDMESSAGE
Code: (clickermann) [Select]
SENDMESSAGE($_hwnd,0x0010,0,0) // закрыть окно
Есть программа на основе Java. открываю, привязываю, отмечаю варианты, все гуд. А когда перехожу в некое окно где нужно вставить текст - команда выделения, вставки, мышь не реагируют. Пробовал через буквы, пробовал через винАпи. Бездыханно.
Что посоветуете?

Опять же команды POSTMESSAGE
Code: (clickermann) [Select]
POSTMESSAGE($_hwnd,0x00B1,0,-1) //Выделить все
POSTMESSAGE($_hwnd, 0x0301, 0, 0) // скопировать
POSTMESSAGE($_hwnd, 0x0302, 0, 0) // вставить
« Last Edit: May 03, 2017, 07:53:47 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #2 on: May 04, 2017, 09:09:16 AM »
Файл txt в папке со скриптом. Нужно зайти в этот txt файл , вырезать последних 100 строк и сохранить измененным. Как реализовать?

Code: (clickermann) [Select]
TFREADARR("file.txt", $arr)
FOR($a=100,$a<ARRSIZE($arr))
   ARRPUSH($arr2, $arr[$a])
END_CYC
TFWRITEARR("file.txt", $arr2)
UNDEFINE($arr)
UNDEFINE($arr2)
HALT

Мммм. Это не последние 100 строк. Это строки с 100 до конца.


Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #3 on: May 04, 2017, 12:11:26 PM »
Oraven, спасибо большое)

kiril, согласен частично. Но раз уж пк стоит, то пусть приносит пользу. Мне обломно, при том, что я был против покупки его со свадебных денег, так еще и чтоб он ограничивался тещиной косынкой - дули! Будет работать!

Vint, спасибо что подметили. Подскажите как правильно)

Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #4 on: May 04, 2017, 12:14:04 PM »
по поводу SENDMESSAGE($_hwnd,0x0010,0,0) - пробовал как есть при отвязанном окне, пробовал при отвязанном с прописанным названием процесса, аналогичные 2 варианта пробовал при привязанном окне. Не достиг результата. В чем я допускаю ошибку?
Тот же нюанс и с постмеседж.

И еще. Видимо перемудрил, взгляните. Задача просто дождаться смены колва пикселей в области, и далее нажать на ЛК в указанном месте.

Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)

GETSCREEN
$count = PXLCOUNT (255,111, 355,44, 3355443) // Ïîòîì ìû åùå ðàç äåëàåì ïîäñ÷åò â òîé æå îáëàñòè
$check = 1
IF($count = $counts)
WAITMS(100)
Else
IF($count < $counts)
LCLICK(123,119)
// äåéñòâèå ïðè íåñîâïàäåíèè
END_IF
Не дожидается появления новых пикселей. Решил пока проблему таким способом, но это абсурд!

Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN(6,406, 1007,444, "а11.bmp")
      $check = 1
      WAITMS(50)
LCLICK(123,119)
Else
GETSCREEN
   IF_PICTURE_IN(6,406, 1007,444, "a11.bmp")
      $check = 1
      WAITMS(50)
LCLICK(123,119)
ELSE
GETSCREEN
   IF_PICTURE_IN(6,406, 1007,444, "a11.bmp")
      $check = 1
      WAITMS(50)
LCLICK(123,119)
ELSE
WAITMS(100)
END_IF
END_CYC
« Last Edit: May 04, 2017, 12:20:58 PM by Loginow »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #5 on: May 04, 2017, 12:43:58 PM »
Vint, спасибо что подметили. Подскажите как правильно)

Я вот эту фразу
Файл txt в папке со скриптом. Нужно зайти в этот txt файл , вырезать последних 100 строк и сохранить измененным. Как реализовать?
могу понять в двух смыслах
1. Взять и оставить только последние 100 строк.
2. Оставить всё, кроме последних 100 строк.

Код будет разный.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #6 on: May 04, 2017, 12:49:35 PM »
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)

GETSCREEN
$count = PXLCOUNT (255,111, 355,44, 3355443)
$check = 1
IF($count = $counts)
WAITMS(100)
Else
IF($count < $counts)
LCLICK(123,119)
END_IF

IF - две штуки, а END_IF только один. Одного не хватает.
И WHILE не закрыт END_CYC.

Во второй части так вообще половины не хватает.

Code: (clickermann) [Select]
GETSCREEN
WHILE(PXLCOUNT(255,111, 355,44, 3355443) = $counts)
    WAITMS(100)
    GETSCREEN
END_CYC

IF(PXLCOUNT(255,111, 355,44, 3355443) < $counts)
    LCLICK(123,119)
    WAITMS(100)
END_IF
« Last Edit: May 04, 2017, 12:53:55 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #7 on: May 04, 2017, 12:59:46 PM »
по поводу SENDMESSAGE($_hwnd,0x0010,0,0) - пробовал как есть при отвязанном окне, пробовал при отвязанном с прописанным названием процесса,

hwnd в SENDMESSAGE нужно задавать всегда. При привязанном окне в системной переменной $_hwnd уже будет нужный hwnd. При отвязанном нужно его указать.
Как и куда "прописывал название процесса"? Кликермэн не работает с названиями процессов, нет ни одной команды. Есть номер HWND окна и его получение по координатам или по заголовку окна.


Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #8 on: May 04, 2017, 02:19:34 PM »
SENDMESSAGE($_hwnd,0x0010,0,0)

Спасибо, да вы правы. По поводу второй части, она к сожалению не сработала для моего случая. Почему не сработала? Через мув на ту же координату навожу курсор, так после перезапуска так уже другой пиксель. Траил 4 раза. Пытаюсь сделать по другому.

Спрашивал гугл, есть картинка, нужно дождаться ее смены и тогда ЛКМ в определенной области. Уточнение: на какую она изменится - не известно. Нужно дождаться смены. Есть такая тема на форуме?

На счет фразы и 2 вариантов. 2) вариант скорее. Не правильно сформулировал. Нужно вырезать из тхт файла 100 последних строк(в буфер), и сохранить файл без 100 последних строк.
« Last Edit: May 04, 2017, 08:50:59 PM by Loginow »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #9 on: May 04, 2017, 03:34:37 PM »
Quote
$h = hget
Что это за бред такой?

На счет слежения за сменой картинки
Code: (clickermann) [Select]
// Пример определения изменения области

GETSCREEN
$hash1 = PXLCRC(200,200, 300,300)
$hash2 = $hash1
WHILE($hash1 = $hash2) // цикл сдерживает выполнение пока любой пиксел в области не изменится
   WAITMS(50)
   GETSCREEN
   $hash2 = PXLCRC(200,200, 300,300)
END_CYC
WAITMS(600)



// Пример определения изменения конкретного пиксела

GETSCREEN
$color1 = PXL(10,10)
$color2 = $color1
WHILE($color1 = $color2) // цикл сдерживает выполнение пока пиксел не изменит цвет
   WAITMS(50)
   GETSCREEN
   $color2 = PXL(10,10)
END_CYC
WAITMS(600)

На счет 100 строк. Вариант во вложении работает так как тебе нужно.
Кликер не умеет работать с множеством строк в одной переменной поэтому чтобы запихнуть строки в буфер приходится использовать стороннюю консольную утилиту nircmd.exe

Также если в файле 100 или меньше строк, все они будут вырезаны в буфер, а файл будет очищен.
« Last Edit: May 04, 2017, 03:37:52 PM by Oraven »

Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #10 on: May 04, 2017, 09:03:11 PM »
сумасшедшего, пардон. Зачитывался справкой, копил, траил и случайно влепил.

На счет слежения за сменой картинки и по вложению это Топ! Спасибо.
Дошел до нюанса: у меня есть постоянное значение 1408, и есть значение которое я получаю(переменное). Нужно сопоставить их в кликермане, возможно ли?
Следующим образом:
Есть 1408, вставляем значение Х, если 1408 > или = X, в ход 1й сценарий.
Если 1408 < X, в ход второй сценарий.

Как создать такую формулу?

Loginow

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #11 on: May 04, 2017, 09:43:08 PM »
Code: (clickerman) [Select]
$pp = 1408;
IF($pp <,= 1408)
... // исполнить сценарий 1
ELSE
... // продолжить сценарий
END_IF
« Last Edit: May 04, 2017, 09:46:55 PM by Loginow »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #12 on: May 04, 2017, 10:05:40 PM »
Есть 1408, вставляем значение Х, если 1408 > или = X, в ход 1й сценарий.
Если 1408 < X, в ход второй сценарий.
Code: (clickermann) [Select]
IF($x > 1408) //если X больше 1408
   // "в ход второй сценарий"
ELSE        //если Х меньше  или равно 1408
   // "в ход 1й сценарий"
END_IF

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #13 on: May 05, 2017, 08:13:54 AM »
Code: (clickerman) [Select]
$pp = 1408;
IF($pp <,= 1408)
... // исполнить сценарий 1
ELSE
... // продолжить сценарий
END_IF

Твой код не верен. В синтаксисе кликера нет никаких точек с запятыми а также меньше или равно.
Верный код
Code: (clickermann) [Select]
$pp = 1408
IF(($pp < 1408)|($pp = 1408))
   // исполнить сценарий 1
ELSE
   // продолжить сценарий
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Товарищи - суть в том... (срочное)
« Reply #14 on: May 05, 2017, 10:43:46 AM »
Чтоб не писать два условия на > или =, проще "вывернуть" - поменять ветки верно/не верно местами
Code: (clickermann) [Select]
$pp = 1408;
IF(1408 < $pp)
    // исполнить сценарий 2
ELSE
    // исполнить сценарий 1
END_IF