Author Topic: Проверка числа в буфере обмена.  (Read 3718 times)

0 Members and 1 Guest are viewing this topic.

justitdo

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Проверка числа в буфере обмена.
« on: February 11, 2017, 07:55:09 PM »
Всем привет. Огромное спасибо форуму и всем, кто мне помогает. Появилась новая задачка. Нужно мне вставить в скрипт анализ числа в буфере обмена и в зависимости от его значения кликать по заданным координатам.  Если число от 200 до 300 - клик по одной координате, от 300 до 400 - по другой и т.д до 2000.  А если вдруг по каким-то причинам в буфере оказалось не число, или число больше или меньше заданных диапазонов, или буфер оказался пустым - нужно, чтобы скрипт пропускал это условие и продолжал работать дальше.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Проверка числа в буфере обмена.
« Reply #1 on: February 11, 2017, 08:59:41 PM »
покапался в старых скриптах, нашел как различал текст от чисел, на случай, если в буфер попадет текст. в принципе возможно это лишнее.

вроде работает:

Code: (clickermann) [Select]
$bufer = strfilter(FROMCLIP(), "()=", 0)  //отсеим скобки, чтоб не выдало ошибку
$check_text=$bufer-$bufer        //проверка, в буфере текст или число
WHILE($check_text = 0)
   
   $check = 0
   SWITCH(int($bufer/100))
   CASE(3)
      print("от 300 до 400") //клики свои сам поставишь вместо лога
   CASE(4)
      print("от 400 до 500")
   CASE(5)
      print("от 500 до 600")
   CASE(6)
      print("от 600 до 700")
   CASE(7)
      print("от 700 до 800")
   CASE(8)
      print("от 800 до 900")
   CASE(9)
      print("от 900 до 1000")
   CASE(10)
      print("от 1000 до 1100")
   CASE(11)
      print("от 1100 до 1200")
   CASE(12)
      print("от 1200 до 1300")
   CASE(13)
      print("от 1300 до 1400")
   CASE(14)
      print("от 1400 до 1500")
   CASE(15)
      print("от 1500 до 1600")
   CASE(16)
      print("от 1600 до 1700")
   CASE(17)
      print("от 1700 до 1800")
   CASE(18)
      print("от 1800 до 1900")
   CASE(19)
      print("от 1900 до 2000")
   DEFAULT
      $check = 1
   END_SWITCH
   
   IF($check = 0)                  //проверка, чтоб число было в пределах 300-2000
      $bufer = strfilter(FROMCLIP(), "()=", 0)
      $check_text=$bufer-$bufer
   ELSE
      $check_text = 1
   END_IF
   
   wait(1) //твоя задерка
END_CYC

print("в буфере ",$bufer )

//тут твое продолжение

halt

justitdo

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Проверка числа в буфере обмена.
« Reply #2 on: February 12, 2017, 12:52:02 AM »
Спасибо) Попробовал - он почему-то безостановочно кликает) А нужно, чтобы один раз кликнул и дальше выполнялось продолжение скрипта.
P.S. Заменил WHILE на IF и в конце добавил END_IF, вроде заработал как надо) Это я цикл на условие заменил получается?
P.P.S. Просто удалил WHILE и END_CYC ничего не добавляя - тоже работает вроде)
« Last Edit: February 12, 2017, 01:12:32 AM by justitdo »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Проверка числа в буфере обмена.
« Reply #3 on: February 12, 2017, 01:18:38 AM »
почему то прочитав твою задачу, я решил что должно кликать пока в буфере нужные числа, и что они постоянно меняются.  :-\
Если число от 200 до 300 - клик по одной координате, от 300 до 400 - по другой и т.д до 2000.  А если вдруг по каким-то причинам в буфере оказалось не число, или число больше или меньше заданных диапазонов, или буфер оказался пустым - нужно, чтобы скрипт пропускал это условие и продолжал работать дальше.
ошибся, ну не беда, так еще проще.  :D
Code: (clickermann) [Select]
$bufer = strfilter(FROMCLIP(), "()=", 0)  //отсеим скобки, чтоб не выдало ошибку
$check_text=$bufer-$bufer        //проверка, в буфере текст или число

IF($check_text=0)
   SWITCH(int($bufer/100))
   CASE(3)
      print("от 300 до 400") //клики свои сам поставишь вместо лога
   CASE(4)
      print("от 400 до 500")
   CASE(5)
      print("от 500 до 600")
   CASE(6)
      print("от 600 до 700")
   CASE(7)
      print("от 700 до 800")
   CASE(8)
      print("от 800 до 900")
   CASE(9)
      print("от 900 до 1000")
   CASE(10)
      print("от 1000 до 1100")
   CASE(11)
      print("от 1100 до 1200")
   CASE(12)
      print("от 1200 до 1300")
   CASE(13)
      print("от 1300 до 1400")
   CASE(14)
      print("от 1400 до 1500")
   CASE(15)
      print("от 1500 до 1600")
   CASE(16)
      print("от 1600 до 1700")
   CASE(17)
      print("от 1700 до 1800")
   CASE(18)
      print("от 1800 до 1900")
   CASE(19)
      print("от 1900 до 2000")
   DEFAULT
      print("в буфере ",$bufer )
   END_SWITCH
ELSE
   print("в буфере текст - ",$bufer )
END_IF



//тут твое продолжение

halt


кстати, если ты уверен, что тебе не понадобится CASE(0) - от 0 до 100 , то можно и выкинуть эту проверку на текст. просто я в начале чето начал с "0", а если в буфере текст, то он бы также срабатывал на этот "0". такчто можно обойтись вот таким кодом:
Code: (clickermann) [Select]
SWITCH(int(FROMCLIP()/100))
CASE(3)
   print("от 300 до 400") //клики свои сам поставишь вместо лога
CASE(4)
   print("от 400 до 500")
CASE(5)
   print("от 500 до 600")
CASE(6)
   print("от 600 до 700")
CASE(7)
   print("от 700 до 800")
CASE(8)
   print("от 800 до 900")
CASE(9)
   print("от 900 до 1000")
CASE(10)
   print("от 1000 до 1100")
CASE(11)
   print("от 1100 до 1200")
CASE(12)
   print("от 1200 до 1300")
CASE(13)
   print("от 1300 до 1400")
CASE(14)
   print("от 1400 до 1500")
CASE(15)
   print("от 1500 до 1600")
CASE(16)
   print("от 1600 до 1700")
CASE(17)
   print("от 1700 до 1800")
CASE(18)
   print("от 1800 до 1900")
CASE(19)
   print("от 1900 до 2000")
END_SWITCH




//тут твое продолжение

halt
и без всяких замарочек, которые постоянно мне лезут в голову  :D

justitdo

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Проверка числа в буфере обмена.
« Reply #4 on: February 12, 2017, 01:25:03 AM »
кстати, если ты уверен, что тебе не понадобится CASE(0) - от 0 до 100 , то можно и выкинуть эту проверку на текст. просто я в начале чето начал с "0", а если в буфере текст, то он бы также срабатывал на этот "0". такчто можно обойтись вот таким кодом:
Code: (clickermann) [Select]
SWITCH(int(FROMCLIP()/100))
CASE(3)
   print("от 300 до 400") //клики свои сам поставишь вместо лога
CASE(4)
   print("от 400 до 500")
CASE(5)
   print("от 500 до 600")
CASE(6)
   print("от 600 до 700")
CASE(7)
   print("от 700 до 800")
CASE(8)
   print("от 800 до 900")
CASE(9)
   print("от 900 до 1000")
CASE(10)
   print("от 1000 до 1100")
CASE(11)
   print("от 1100 до 1200")
CASE(12)
   print("от 1200 до 1300")
CASE(13)
   print("от 1300 до 1400")
CASE(14)
   print("от 1400 до 1500")
CASE(15)
   print("от 1500 до 1600")
CASE(16)
   print("от 1600 до 1700")
CASE(17)
   print("от 1700 до 1800")
CASE(18)
   print("от 1800 до 1900")
CASE(19)
   print("от 1900 до 2000")
END_SWITCH




//тут твое продолжение

halt
и без всяких замарочек, которые постоянно мне лезут в голову  :D
От 0 до 100 точно не понадобится. А вот в буфер вместо числа могут попасть и скобочки и текст, в этом случае такой вариант подходит?
P.S. Проверил, все нормально! Спасибо большое за помощь.
« Last Edit: February 12, 2017, 01:29:41 AM by justitdo »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Проверка числа в буфере обмена.
« Reply #5 on: February 12, 2017, 01:37:40 AM »
да, подходит. просто если в буфере будет чтото еще кроме числа, то  int(FROMCLIP()/100) будет возвращать "0" .

только вот обнаружен баг с этими самыми скобочками, а точнее в комбинации ") или (" , но не оба ("") . если в буфер попадает такая комбинация, то либо ошибка, либо кликер уходит в транс. v4.12.001 . возможно в версиях посвежее это исправлено.


нашел закономерность
Code: (clickermann) [Select]
IF(FROMCLIP()=0)
END_IF
halt

//   ("    ")

("   или   ") в буфере выдает ошибку.   в версии 4.13 b3 ошибка  также вылазит.

а если делать вот такое действие с буфером
Code: (clickermann) [Select]
print(int(FROMCLIP()))

halt

//   ("    ")

и в буфере не дай бог будет  (" , то всё, хана. но в это же время ") норм прокатывает. но тут уже в 4.13 b3  всё норм работает.

« Last Edit: February 12, 2017, 02:13:01 AM by dramster »