Author Topic: автоматизация в Давинчи  (Read 12789 times)

0 Members and 3 Guests are viewing this topic.

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #30 on: September 23, 2021, 07:11:57 PM »
Quote
Он у тебя застревает там же, только позже.
я отключал этот цикл, без него тоже не видит нажатий. Он вообще не обязательный изыск.
но я сегодня заменю этот кусок на другой, на основе твоего примера, со сравнением  первых трех элементов массива поэлементно.

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #31 on: September 24, 2021, 04:03:49 AM »
https://youtu.be/t8411_z0Gwc
записал видео, как у меня работало - из него видно, что если нажата лкм, то после этого переменная $svitch=1 это событие лкм.
Поскольку кнопки в массив помещаются по порядку величины, то это означает, что 0-й элемент массива это лкм, поскольку он =1
Тогда я ввел проверку - если 0-й элемен= 1, то использовать 1-й


 
 


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #32 on: September 24, 2021, 04:34:16 AM »
эта версия работает
долго подбирал задержки, чтоб четко срабатывали кнопки, но всё равно четкости нет.
пробовал сделать с ISKEYDOWN  вместо GETKEYSDOWN но не получилось.
ISKEYDOWN($arr[$n]) не срабатывает почему-то


Code: (clickermann) [Select]
SUB(Will)
   //подпрограмма установки мыши с зажатой лкм на нужную координату
   LUP($_xmouse, $_ymouse)
   WAITMS(10)
   LDOWN($X[$N], $Y[$N])
   LOGCLEAR
print("координаты ", $X[$N],",", $Y[$N])
print ("$kvar[0]=",$kvar[0]," ","$kvar[1]",$kvar[0])
   
END_SUB

SUB(log_kvar)
   
   FOR($i=0, $i < ARRSIZE($kvar))
      LOGWRITE("    ", $i, " : ", $kvar[$i])
   END_CYC
   LOGWRITE("$kvar0:",$kvar0,"$kvar1:",$kvar1   )
   print("$svitch=", $svitch)
   print("$keya[$n]=",$keya[$n])
    // WAITMS(50)
END_SUB

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатиами
//strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $ х
print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $ y
print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
strseparate(TFREAD($csv, 5), ",", $Keya)   //читаем строку  файла в массив  $Key1
//strseparate(TFREAD($csv, 6), ",", $Keyb)   //читаем строку  файла в массив  $Key2
//strseparate(TFREAD($csv, 7), ",", $Keyc)   //читаем строку  файла в массив  $Key3
print("массив создан")
print()



WHILE(1)                                    // начало бесконечного цикла
   
   GETKEYSDOWN($kvar) //определяем, какие кнопки нажаты
       WAITMS(10)
   $svitch=$kvar[0] //sitch - переменная для включения подпрограммы will
   if ($kvar[0]=1 & ARRSIZE($kvar)>1 ) //если нажата лкм, и что-то еще то брать второй элемент массива
      $svitch=$kvar[1]  //берем второй элемент массива в svitch
   end_if
     
   FOR ($n=1, $n<ARRSIZE($Keya))
           //print($n)
            //log_kvar()
            if($Keya[$n]= $svitch)
         Will()
      END_IF
   // WAITMS(20)
   END_CYC
END_CYC

содержимое файла koorda.csv
Code: [Select]
0,1,2,3,4,5,6
0,Whill,Y,R,G,B,all
x,90,34,75,109,146,85
y,854,944,944,944,944,960
Keya,81,87,69,82,84,89
Keyb,17,17,17,17,17,17
Keyc,0,0,0,0,0,0
,q,w,e,r,t,y

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #33 on: September 24, 2021, 04:42:58 AM »
Хочу попробовать  сделать с оператором ISKEYDOWN
не понимаю, почему вот этот код работает
если нажать "q" то печатает "опа"

Code: (clickermann) [Select]
LOGCLEAR
$csv = "koorda.csv"
strseparate(TFREAD($csv, 5), ",", $Key1)
WHILE(1)
   $key= $Key1[1]// 81 значение кнопки q
   if(ISKEYDOWN($key)=1)//нажата ли
      print("опа")
   end_if
   WAITMS(50)
END_CYC


а этот не работает - сообщение: ошибка в ISKEYDOWN($iskey)
и даже в сообщении об ошибке строку 34 не указывает, где этот оператор

Code: (clickermann) [Select]
SUB(Will)
   //подпрограмма установки мыши с зажатой лкм на нужную координату
   LUP($_xmouse, $_ymouse)
   WAITMS(10)
   LDOWN($X[$N], $Y[$N])
   print("координаты ", $X[$N],",", $Y[$N])
   
END_SUB

SUB(log_kvar)
   LOGCLEAR
   print($Names[n],"$key1[$n]=" $key1[$n])
END_SUB

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатиами
//читаем строки  файла в массивы
//strseparate(TFREAD($csv, 2), ",", $Names)
strseparate(TFREAD($csv, 3), ",", $X)
strseparate(TFREAD($csv, 4), ",", $y)
strseparate(TFREAD($csv, 5), ",", $Key1)
//strseparate(TFREAD($csv, 6), ",", $Key2)
//trseparate(TFREAD($csv, 7), ",", $Key3)
print("массив создан")
print("$key1[1]=",$key1[1])



WHILE(1)                                    // начало бесконечного цикла
   
   FOR ($n=1, $n<ARRSIZE($Key1)+1)
      $iskey= $key1[$n]
      if(ISKEYDOWN($iskey)=1)//нажата ли
         log_kvar()
         Will()
      end_if
      WAITMS(50)
   END_CYC
END_CYC


upd разобрался. в 32-й строке счетчик вылетает за пределы массива.
« Last Edit: September 28, 2021, 05:26:26 AM by Ivankak »

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #34 on: September 24, 2021, 06:02:34 AM »
вот этот код работает сносно.

Code: (clickermann) [Select]
SUB(Will)
   //подпрограмма установки мыши с зажатой лкм на нужную координату
   LOGCLEAR
LUP($_xmouse, $_ymouse)
   WAITMS(10)
   LDOWN($X[$N], $Y[$N])
   print("$Names=", $Names[$n])
print("координаты ", $X[$N],",", $Y[$N])
   
END_SUB

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатиами
//читаем строки  файла в массивы
strseparate(TFREAD($csv, 2), ",", $Names)
strseparate(TFREAD($csv, 3), ",", $X)
strseparate(TFREAD($csv, 4), ",", $y)
strseparate(TFREAD($csv, 5), ",", $Keya)
//strseparate(TFREAD($csv, 6), ",", $Keyb)
//trseparate(TFREAD($csv, 7), ",", $Keyc)
print("массив создан")
print("$keya[1]=",$keya[1])



WHILE(1)                                    // начало бесконечного цикла
   
   FOR ($n=1, $n<ARRSIZE($Keya))
      if(ISKEYDOWN($keya[$n])=1)//если нажата одна из кнопок массива Keya то
         Will()                //исполнить подпрограмму
         WHILE(iskeydown($keya[$n]) = 1)  //если клавиша все еще нажата, то подвисаем тут пока не отпустит
            waitms(50)
         END_CYC
      end_if
      WAITMS(10)
   END_CYC
END_CYC             
 
koorda.csv
Code: [Select]
0,1,2,3,4,5,6
0,Whill,Y,R,G,B,Roll
x,90,34,75,109,146,85
y,854,944,944,944,944,960
Keya,81,87,69,82,84,89
Keyb,17,17,17,17,17,17
Keyc,0,0,0,0,0,0
0,q,w,e,r,t,y
есть ли функция, чтобы из буквы  получать ее код #A=> 65 ?
сейчас пришлось в табличке написать десятичные коды вместо символов, иначе iskeydown не работает с переменными.Это не очень удобно, хотя и терпимо.
Для красоты  кода хочется, чтобы чтение строк в массивы из файла происходило в цикле, а не как сейчас с 15 по21 строки. Но не понимаю, как это сделать.
Можно ли в strseparate имя массивов подставлять, как переменную? Не городить же для этого отдельный массив с именами.. На 5 массивов будет усложнение, а не упрощение.
Я где-то прочитал, что скрипт Кликермана может быть скомпилирован. Как это делается?
« Last Edit: September 24, 2021, 06:16:36 AM by Ivankak »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #35 on: September 24, 2021, 12:45:02 PM »
ISKEYDOWN($arr[$n]) не срабатывает почему-то

А так?
Code: (clickermann) [Select]
ISKEYDOWN(INT($arr[$n]))

есть ли функция, чтобы из буквы  получать ее код #A=> 65 ?
Только в версии 4.14
Code: (clickermann) [Select]
print(CODE("A"))но она beta

Лучше самому преобразовать для нужного диапазона символов. Вот цифры и буквы:
Code: (clickermann) [Select]
$liters = "0123456789:::::::ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$code = STRPOS($liters, "Z") + 47
print($code)

Для красоты  кода хочется, чтобы чтение строк в массивы из файла происходило в цикле, а не как сейчас с 15 по21 строки. Но не понимаю, как это сделать.
Можно ли в strseparate имя массивов подставлять, как переменную? Не городить же для этого отдельный массив с именами.. На 5 массивов будет усложнение, а не упрощение.
Никак, там же имена массивов разные. Да и 6 строк всего и наглядно. 6 массивов это мало. Если бы их получалась несколько десятков или сотен, тогда проще было хранить в многомерном массиве.

Я где-то прочитал, что скрипт Кликермана может быть скомпилирован. Как это делается?
Нагло врут. Защиты всякие можно сделать от обфускации до выноса кода в dll, но это не компиляция.
« Last Edit: September 24, 2021, 01:12:20 PM by Vint »


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #36 on: September 24, 2021, 06:27:40 PM »
Quote
Лучше самому преобразовать для нужного диапазона символов. Вот цифры и буквы:
Код: Clickermann
Code: (clickermann) [Select]
$liters = "0123456789:::::::ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$code = STRPOS($liters, "Z") + 47
print
($code).

можно реализовать эту формулу в табличном процессоре Open Office Calk или Exel. Там есть функция code, которая выдает код символа. Только этот код отличается на 49 от кода клавиш. и цифры сдвинуты. Но может это лучше, чем в исполняемый код вносить?
Если сделать еще одну строку в CSV с полным перечнем всех символов, в позициях, соответствующим номерам, то не будет ли это излишним расходом памяти?
Или после получения всех нужных кодов обнулить(очистить) массив? Как это сделать?


Quote
А так?

Code: (clickermann) [Select]
ISKEYDOWN(INT($arr[$n]))
если в csv заданы коды, то и без int работет. А если буквы, то не понятно, что делать.

Quote
Только в версии 4.14
Код: Clickermann
Code: (clickermann) [Select]
print(CODE("A"))
А если с переменной из массива, то как записать?

Работает ли мой код у вас?

Как лучше организовать ввод координат?
Полагаю, это должен быть отдельный скрипт.
Не понимаю пока, как быть с именами этих координат. Там в интерфейсе кроме тех 4 кругов, на которых я тренировался есть еще и другие панели на этом же месте, они немного отличаются, и есть переключения между ними. чтоб не запутаться надо дать им имена.
И надо, чтоб при выбранных  других панелях не было путаницы и не плодить кучу лишних шоткатов.







Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #37 on: September 24, 2021, 11:58:15 PM »
Quote
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
вот она приблуда для расширения. Их можно несколько подключить.
https://www.aliexpress.com/item/32957655097.html


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #38 on: September 28, 2021, 12:02:04 AM »
Как сделать чтоб имя переменой само было бы переменной?
как исправить строку 20, чтоб она печатала то же, что и 21?

Code: (clickermann) [Select]
$arr[0]= "Маши"
$arr[2]= "Пети"
$arr[2]= "Васи"

$str= "Сумка"

//Массивы, что в сумке?
$СумкаМаши[0]= "печенье"
$СумкаМаши[1]= "помада
$СумкаМаши[2]= "расчёска"

$СумкаПети[0]= "машинка"
$СумкаПети[1]= "гайка"
$СумкаПети[2]= "петарда"

$СумкаВаси[0]= "расческа"
$СумкаВаси[1]= "шарик"
$СумкаВаси[2]= "ручка"

print(STRCONCAT("$",$str,$arr[0],[2]))
print($СумкаМаши[2])
waitms(50)

halt

Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #39 on: September 28, 2021, 05:02:29 AM »
Сделал тестовую версию. Если кто-то попробует - пожалуйста, отпишитесь.
Работает пока 4-мя колесами во вкладке Primaries. Это просто тест. Потом будет остальное.
1-4 выбор колеса
помещает курсор на элемент управления и зажимает лкм. Чтобы использовать мышь свободно надо кликнуть.
пока программа работает она будет захватывать при нажатии кнопок курсор. остановить программу можно кнопкой стоп в Кликермане.
Alt+s не сработает, потому, что Давинчи перехватывает свой шоткат "добавить ноду после"

w - Y
e - R
r - G
t - B
y - крутилка под колесом


Code: (clickermann) [Select]
SUB(Will)
   //подпрограмма установки мыши с зажатой лкм на нужную координату
   LOGCLEAR
   LUP($_xmouse, $_ymouse)
   WAITMS(10)
   LDOWN($X[$N], $Y[$N])
   print("$Names=", $Names[$n])
   print("координаты ", $X[$N],",", $Y[$N])
   
END_SUB

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатиами
//читаем строки  файла в массивы
strseparate(TFREAD($csv, 2), ",", $Names)
strseparate(TFREAD($csv, 3), ",", $X)
strseparate(TFREAD($csv, 4), ",", $y)
strseparate(TFREAD($csv, 5), ",", $Keya)
//strseparate(TFREAD($csv, 6), ",", $Keyb)
//trseparate(TFREAD($csv, 7), ",", $Keyc)
print("массив создан")
print("$keya[18]=",$keya[18])


$SHIFT=1
WHILE(1)                                   // начало бесконечного цикла
   FOR($S=49,$s<53) //значения кнопок 1-4
      IF(ISKEYDOWN($s)=1)
         WHILE(iskeydown($s)=1)  //если клавиша все еще нажата, то подвисам тут пока не отпустит
            waitms(10)
         END_CYC
         
         $n=($s-49)*6+1
        Will()
        $SHIFT=$n

      end_if
   END_CYC
   
   
   
   FOR ($n=$SHIFT, $n<$SHIFT+6)
 //  PRINT($SHIFT, " " ,$N)
      if(ISKEYDOWN($keya[$n])=1)//если нажата одна из кнопок массива Keya то
         Will()                //исполнить подпрограмму
         WHILE(iskeydown($keya[$n]) = 1)  //если клавиша все еще нажата, то подвисам тут пока не отпустит
            waitms(10)
         END_CYC
      end_if
      WAITMS(10)
   END_CYC
END_CYC


содержимое файла koorda.csv
файл можно редактировать в табличном редакторе. Например Apache OpenOffice Calc https://www.openoffice.org/
кнопки можно переназначать в 5-й строке, которая начинается с "Keya" в соответствии с этой таблицей
https://github.com/sepehrsohrabi/Decimal-Virtual-Key-Codes

Code: [Select]
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
0,Lift Whill,Lift Y,Lift R,Lift G,Lift B,Shad Roll,Gamma Whill,Gamma Y,Gamma R,Gamma G,Gamma B,Gamma Roll,Gain Whill,Gain Y,Gain Y,Gain G,Gain B,Gain Roll,Offset Whill,Offset Y,Offset R,Offset G,Offset B,Offset Roll
x1,90,34,75,109,146,85,268,210,252,288,325,271,447,389,431,467,504,442,624,573,573,627,676,624
y1,854,944,944,944,944,960,856,944,944,944,944,960,855,944,944,944,944,960,854,944,944,944,944,961
Keya,81,87,69,82,84,89,81,87,69,82,84,89,81,87,69,82,84,89,81,87,69,82,84,89
Keyb,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Keyc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,Q или 1,w,e,r,t,y,Q или 2,w,e,r,t,y,Q или 3,w,e,r,t,y,Q или 4,w,e,r,t,y
« Last Edit: September 28, 2021, 02:05:37 PM by Ivankak »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #40 on: September 28, 2021, 10:34:22 AM »
можно реализовать эту формулу в табличном процессоре Open Office Calk или Exel. Там есть функция code, которая выдает код символа. Только этот код отличается на 49 от кода клавиш. и цифры сдвинуты. Но может это лучше, чем в исполняемый код вносить?
Если сделать еще одну строку в CSV с полным перечнем всех символов, в позициях, соответствующим номерам, то не будет ли это излишним расходом памяти?
Или после получения всех нужных кодов обнулить(очистить) массив? Как это сделать?
Это не ардуино и не микропроцессоры, здесь не нужно экономить каждый байт. В данном случае преждевременная и совершенно не нужная оптимизация. Получается экономия на спичках.

А если с переменной из массива, то как записать?
Как обычно
Code: (clickermann) [Select]
print(CODE($arr[100]))
Работает ли мой код у вас?
Без понятия. У меня же нет Давинчи. Если только по скрину поелозить, так нужно координаты переделывать, там же всё захордкоржено.

Как лучше организовать ввод координат?
Полагаю, это должен быть отдельный скрипт.
Если часто перезадавать, то да, отдельный скрипт.
Смотря какая цель использования. Я так понимаю это как панели в Photoshop могут быть где угодно и любого размера.  Если настраивать под себя одного, то часто никто не меняет интерфейс. Можно зафигачить автоопределение нужных элементов. Если это для многих людей и там неизвестно что творится, то скрипт с заданием всех нужных координат и записью в конфиги.
"Кликните туда" (запомнили), "Кликните сюда" (запомнили) ...
Вот, когда-то делал такое, там это было оправдано
http://crapware.aidf.org/forum/index.php?topic=69.msg1957#msg1957
Файл Бот Зомби ферма Элвисы по островам. Настройка 2.1 Аэроплан.cms
Там на старую версию, запустить не выйдет, но глянуть можно.

С именами я не понял. В чём проблема задать нужные имена. Хранил бы в ini и проблем бы небыло ни с секциями ни с именами. В csv тоже не проблема вроде.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #41 on: September 28, 2021, 10:48:11 AM »
Как сделать чтоб имя переменой само было бы переменной?
как исправить строку 20, чтоб она печатала то же, что и 21?

Code: (clickermann) [Select]
$arr[0]= "Маши"
$arr[2]= "Пети"
$arr[2]= "Васи"

$str= "Сумка"

//Массивы, что в сумке?
$СумкаМаши[0]= "печенье"
$СумкаМаши[1]= "помада
$СумкаМаши[2]= "расчёска"

$СумкаПети[0]= "машинка"
$СумкаПети[1]= "гайка"
$СумкаПети[2]= "петарда"

$СумкаВаси[0]= "расческа"
$СумкаВаси[1]= "шарик"
$СумкаВаси[2]= "ручка"

print(STRCONCAT("$",$str,$arr[0],[2]))
print($СумкаМаши[2])
waitms(50)

halt
http://crapware.aidf.org/forum/index.php?topic=5612.msg36775#msg36775


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #42 on: September 28, 2021, 10:55:05 AM »
кнопки можно переназначать в 5-й строке, которая начинается с "Keya" в соответствии с этой таблицей
https://github.com/sepehrsohrabi/Decimal-Virtual-Key-Codes
В справке есть все эти коды
Язык сценариев -- >> Приложение 1. Коды клавиш


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: автоматизация в Давинчи
« Reply #43 on: September 28, 2021, 11:10:14 AM »
Почему перешёл на ISKEYDOWN?
ISKEYDOWN хорошо, когда клавиш мало. Их уже 24 шт. Сейчас цикл сканирования 24 * 10 + ещё чуть ≈ 250 ms


Ivankak

  • Освоившийся
  • **
  • Posts: 37
    • View Profile
Re: автоматизация в Давинчи
« Reply #44 on: September 28, 2021, 01:27:41 PM »
Почему перешёл на ISKEYDOWN?
ISKEYDOWN хорошо, когда клавиш мало. Их уже 24 шт. Сейчас цикл сканирования 24 * 10 + ещё чуть ≈ 250 ms
цикл сканирования 6 позиций. там есть сдвиг.
Но задержка возникает только если кнопка зажата. Если не зажата, то даже на 24 кнопки будет один раз 10мс.

У меня не получилось сделать на GetskeyDown стабильное переключение. я экспериментировал с задержками, но четкого переключения не получилось.

Quote
Работает ли мой код у вас?
Без понятия. У меня же нет Давинчи. Если только по скрину поелозить, так нужно координаты переделывать, там же всё захордкоржено.
Блекмэджик не Адоб. В Давинчи всё всегда на местах. Очень мало какие окна можно отцепить. Это окно с колесам всегда на месте. Именно по этой причине вся эта возня с программированием имеет смысл.
Если экран 1920х1080 то всё совпадёт.
Вопрос не в том, попадет или нет на координаты, тут сомнений нет, а стабильно ли переключается по кнопкам?

по поводу "захордкоржено" - планирую добавить распознавание имени страницы, чтоб скрипт не путался в них. А то дофига кнопок жать - не удобно получается.

я написал отдельный скрипт для задания координат. Задать возможно надо один раз, но таких страниц по 24 координаты у Двинчи как минимум 5 штук, а может еще чего захочется добавить потом. И такое количество пар 2х и 3х значных чисел записывать вручную тяжелее, чем написать скрипт.

Пользоваться скриптом так:
в логе пишется название элемента например "Lift Whill"
подводишь мышь к нему
нажимаешь Q
координаты записываются в массив
по окончании прохода по всем элементам координаты собираются в массивах X и Y
массивы записываются в строчные переменные через запятую (тут мне не хватило оператора, пришлось склеивать строку)
Строчные переменные  записываются в строки файла.

Code: (clickermann) [Select]
LOGCLEAR

$csv = "koorda.csv"

strseparate(TFREAD($csv, 2), ",", $Names)
strseparate(TFREAD($csv, 3), ",", $X)
strseparate(TFREAD($csv, 4), ",", $y)


for ($n=7, $n<ARRSIZE($names))
   print ($names[$n])
   WHILE(iskeydown(#q) = 0)
      waitms(20)
   END_CYC
   WHILE(iskeydown(#q)=1)
      print ("нажата"," ",$n)
      waitms(20)
      WHILE(iskeydown(#q) = 1)  //тут пока не отпустит
         waitms(50)
      END_CYC

      $x[$n]= $_xmouse
      $y[$n]= $_ymouse
      print("x=",$x[$n],"y=",$y[$n],"$n=",$n)


   END_CYC
END_CYC

for ($n=0, $n<ARRSIZE($names))
   print($x[$n],", ")
   print($y[$n],", ")
END_CYC
$Xstr=$x[0]
$ystr=$y[0]
for ($n=1, $n<ARRSIZE($names))
   
   $Xstr= STRCONCAT($Xstr,",", $x[$n])
   $Ystr= STRCONCAT($Ystr,",", $Y[$n])
   
END_CYC
print($Xstr)
print($Ystr)

$scva= "ko.csv"

TFDELETE($scva, 3 )
TFWRITE ($scva, $xstr, 3 )
TFDELETE($scva, 4 )
TFWRITE ($scva, $ystr, 4 )

halt

Quote
В справке есть все эти коды
Язык сценариев -- >> Приложение 1. Коды клавиш
я дал ссылку на пост паре человек, которые далеки от программирования и они не будут открывать хэлп :)

Quote
Лучше самому преобразовать для нужного диапазона символов. Вот цифры и буквы:

Code: (clickermann) [Select]
$liters = "0123456789:::::::ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$code = STRPOS($liters, "Z") + 47
print($code)
Да, стоит сделать такую подпрограмму. Она отработает 1 раз при загрузке и  не будет тормозить работу, а удобства добавит сильно.
блин, я не знал про оператор STRPOS. И мне не пришло бы в голову забить промежуток двоеточиями. Я бы сделал через условия :)
Так, конечно, изящно выглядит.

Про массивы. Для этой задачи вероятно я перепишу циклы еще раз. По идее надо эмулировать 4х мерный массив. 3х6х4х5.
размер 3 это кнопка клавиатуры +2 координаты
размер 6 элементов для одного колеса
размер 4 колеса
размер 5 экранов.

Если б можно было имя массива задавать, переменной, то было бы удобно организовывать цикл по одномерным массивам, чтобы собрать из них 3х или 4х мерный.
Но и так придумаю что-нибудь. Наверное сделаю больше строк в csv.

Quote
С именами я не понял. В чём проблема задать нужные имена. Хранил бы в ini и проблем бы не было ни с секциями ни с именами. В csv тоже не проблема вроде.
В ini файле не наглядно хранить координаты, они же парами, и к ним еще клавиша, которая их вызывает. И создавать этот ini хлопотно в моем случае. Сложно проконтролировать правильность.
В CSV , когда открываешь  в табличном редакторе - все видно наглядно- строки, столбцы.
« Last Edit: September 28, 2021, 02:28:13 PM by Ivankak »