Author Topic: Создание простого скрипта "Соло на клавиатуре"  (Read 3954 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Есть приложение ВК Solo на клавиатуре http://vk.com/nabiraem.test?mid=66156092

В группе спрашивали на него скрипт. Посмотрев на приложение стало понятно что задача идеально подходит для начинающих скриптописцев. Скрипт по идее должен быть не сложным.
Понятно что вариантов реализации может быть несколько. Предлагайте свои варианты.



Мой вариант под катом и во вложении, но лучше попробуйте сначала сами
[spoiler]

Видео работы (много ошибок возникает из-за вмешательство пишущей программы)
http://vk.com/clickermann?z=video-14410794_171402933%2Fvideos-14410794

Code: (clickermann) [Select]
#name "solo"
// Author: Vint
// Version: 0.1.0 (04.02.2015)
// Скрипт для Clickermann v4.11 002
#logfile

$c = 4570476
$error = 0
MOVE($_xmax,0)
WAITMS(50)

GETSCREEN
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "keyb.bmp")
   $vX = $_return1-12
   $vY = $_return2+23
   $sh1_x = $vX + 50
   $sh1_y = $vY + 139
   $sh2_x = $vX + 510
   $sh2_y = $vY + 139
   
   $cl1_x = $vX + 40
   $cl1_y = $vY + 179
   $cl2_x = $vX + 530
   $cl2_y = $vY + 179
   
   $sp1_x = $vX + 212
   $sp1_y = $vY + 179
   $sp2_x = $vX + 330
   $sp2_y = $vY + 179
   
   $back_x = $vX + 512
   $back_y = $vY + 18
ELSE
   LOGWRITE ("Клавиатура не найдена")
   HINTPOPUP("Клавиатура не найдена", "Стоп")
   HALT
END_IF

STRSEPARATE("192,49,50,51,52,53,54,55,56,57,48,189,187", ",", $row1_arr)
STRSEPARATE("9,81,87,69,82,84,89,85,73,79,80,219,221,111", ",", $row2_arr)
STRSEPARATE("20,65,83,68,70,71,72,74,75,76,186,222,13", ",", $row3_arr)
STRSEPARATE("90,88,67,86,66,78,77,188,190,191", ",", $row4_arr)

LCLICK($vX+723,$vY-51)
WAITMS(300)

WHILE(1)
   $shift = 0
   $ctrl = 0
   $key = 0
   
   GETSCREEN($vX,$vY,$vX+574,$vY+199)
   IF((PXL($sh1_x,$sh1_y) = $c) | (PXL($sh2_x,$sh2_y) = $c))
      KEYDOWN(#SHIFT)
      $shift = 1
   END_IF
   IF((PXL($cl1_x,$cl1_y) = $c) | (PXL($cl2_x,$cl2_y) = $c))
      KEYDOWN(#CTRL)
      $ctrl = 1
   END_IF
   IF((PXL($sp1_x,$sp1_y) = $c) | (PXL($sp2_x,$sp2_y) = $c))
      KEYPRESS(#SPACE)
      $key = 1
      WAITMS(30)
   ELSE
      IF(PXL($back_x,$back_y) = 2237183)
         KEYPRESS(#BACKSPACE)
         $key = 1
         INC($error)
         LOGWRITE ("Ошибка набора!")
         HINTPOPUP(" ", "Ошибка набора!")
      END_IF
   END_IF
   
   // ряд 1
   IF($key = 0)
      $stx = $vX + 22
      FOR($i=0, $i < 13)
         IF(PXL(39*$i+$stx,$vY+18) = $c)
            KEYPRESS($row1_arr[$i])
            LOGWRITE ("кн ", $row1_arr[$i])
            HINTPOPUP(" ", $row1_arr[$i])
            $key = 1
            $i = 100
         END_IF
      END_CYC
   END_IF
   
   // ряд 2
   IF($key = 0)
      $stx = $vX + 40
      FOR($i=0, $i < 14)
         IF(PXL(39*$i+$stx,$vY+58) = $c)
            KEYPRESS($row2_arr[$i])
            LOGWRITE ("кн ", $row1_arr[$i])
            HINTPOPUP(" ", $row1_arr[$i])
            $key = 1
            $i = 100
         END_IF
      END_CYC
   END_IF
   
   // ряд 3
   IF($key = 0)
      $stx = $vX + 51
      FOR($i=0, $i < 13)
         IF(PXL(39*$i+$stx,$vY+98) = $c)
            KEYPRESS($row3_arr[$i])
            LOGWRITE ("кн ", $row1_arr[$i])
            HINTPOPUP(" ", $row1_arr[$i])
            $key = 1
            $i = 100
         END_IF
      END_CYC
   END_IF
   
   // ряд 4
   IF($key = 0)
      $stx = $vX + 95 + 22
      FOR($i=0, $i < 10)
         IF(PXL(39*$i+$stx,$vY+138) = $c)
            KEYPRESS($row4_arr[$i])
            LOGWRITE ("кн ", $row1_arr[$i])
            HINTPOPUP(" ", $row1_arr[$i])
            $key = 1
            $i = 100
         END_IF
      END_CYC
   END_IF
   
   IF($shift = 1)
      KEYUP(#SHIFT)
   END_IF
   IF($ctrl = 1)
      KEYUP(#CTRL)
   END_IF
   WAITMS(80)
END_CYC

HALT
[/spoiler]
« Last Edit: February 09, 2015, 05:31:32 PM by Vint »


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
с помощью экранной клавиатуры.  :D
 но всё дело уперлось в обновление подсветки нужной клавиши. как я с задержками не игрался, дальше скорости в 700-750(незнаю в чем там расчет) я не разогнался.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
   $xb=$_return1
   $yb=$_return2
   WAITMS(100)
END_IF


WNDPOS (wndfind("Экранная клавиатура"),$xb-19,$yb+234)
WNDSIZE (wndfind("Экранная клавиатура"),962, 239)
WAITMS(500)

LCLICK($xb+3,$yb+3)
waitms(500)
LCLICK($xb+100,$yb-50)



WHILE(1)     
   GETSCREEN($xb-10,$yb+25,$xb+569,$yb+228)
   IF_PIXEL_IN($xb-10,$yb+25,$xb+569,$yb+228, 4570476)
      $xkey=$_return1
      $ykey=$_return2
     
      IF((pxl($xb+50,$yb+170)=4570476)|(pxl($xb+500,$yb+170)=4570476))
         LCLICK($xb+22,$yb+400)
      END_IF     
      //первый ряд
      IF($ykey=$yb+29)
         LCLICK($xkey+77,$ykey+253)
      else
         //второй ряд
         IF($ykey=$yb+69)
            LCLICK($xkey+36,$ykey+253)
         else
            //третий ряд
            IF($ykey=$yb+109)
               LCLICK($xkey+46,$ykey+253)
            else
               //четвертый ряд
               IF($ykey=$yb+149)
                  LCLICK($xkey+34,$ykey+253)
               else
                  //пятый, пробел
                  IF($ykey=$yb+190)
                     LCLICK($xkey,$ykey+253)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF     
      waitms(60)
   else
      IF(pxl($xb+500,$yb+50)=2237183)
         LCLICK($xb+580,$yb+280)
         print("ошибка")
         waitms(60)
      else
         waitms(60)
         GETSCREEN($xb-10,$yb+25,$xb+569,$yb+228)
         IF_PIXEL_IN($xb-10,$yb+25,$xb+569,$yb+228, 4570476)
         else
            print("всё")
            halt
         END_IF
      END_IF
   END_IF   
END_CYC

в экранной клавиатуре нужно включить нумпад в параметрах, чтобы кнопки можно было зделать примерно такогоже размера как и в вкприложении.
настроено под вин7 аэро тему.

скрипт в работе:
https://www.youtube.com/watch?v=Y6Q0H-jx9Io

« Last Edit: February 04, 2015, 09:43:28 PM by dramster »