Автор Тема: автоматизация в Давинчи  (Прочитано 1721 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #30 : Сентябрь 23, 2021, 07:11:57 pm »
Цитировать
Он у тебя застревает там же, только позже.
я отключал этот цикл, без него тоже не видит нажатий. Он вообще не обязательный изыск.
но я сегодня заменю этот кусок на другой, на основе твоего примера, со сравнением  первых трех элементов массива поэлементно.

Ivankak

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


 
 


Ivankak

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


Код: Clickermann
  1. SUB(Will)
  2.   //подпрограмма установки мыши с зажатой лкм на нужную координату
  3.   LUP($_xmouse, $_ymouse)
  4.   WAITMS(10)
  5.   LDOWN($X[$N], $Y[$N])
  6.   LOGCLEAR
  7. print("координаты ", $X[$N],",", $Y[$N])
  8. print ("$kvar[0]=",$kvar[0]," ","$kvar[1]",$kvar[0])
  9.  
  10. END_SUB
  11.  
  12. SUB(log_kvar)
  13.  
  14.   FOR($i=0, $i < ARRSIZE($kvar))
  15.      LOGWRITE("    ", $i, " : ", $kvar[$i])
  16.   END_CYC
  17.   LOGWRITE("$kvar0:",$kvar0,"$kvar1:",$kvar1   )
  18.   print("$svitch=", $svitch)
  19.   print("$keya[$n]=",$keya[$n])
  20.    // WAITMS(50)
  21. END_SUB
  22.  
  23. LOGCLEAR
  24.  
  25. $csv = "koorda.csv"          //задаем имя файла с координатиами
  26. //strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
  27. print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
  28. strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $ х
  29. print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
  30. strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $ y
  31. print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
  32. strseparate(TFREAD($csv, 5), ",", $Keya)   //читаем строку  файла в массив  $Key1
  33. //strseparate(TFREAD($csv, 6), ",", $Keyb)   //читаем строку  файла в массив  $Key2
  34. //strseparate(TFREAD($csv, 7), ",", $Keyc)   //читаем строку  файла в массив  $Key3
  35. print("массив создан")
  36. print()
  37.  
  38.  
  39.  
  40. WHILE(1)                                    // начало бесконечного цикла
  41.  
  42.   GETKEYSDOWN($kvar) //определяем, какие кнопки нажаты
  43.       WAITMS(10)
  44.   $svitch=$kvar[0] //sitch - переменная для включения подпрограммы will
  45.   if ($kvar[0]=1 & ARRSIZE($kvar)>1 ) //если нажата лкм, и что-то еще то брать второй элемент массива
  46.      $svitch=$kvar[1]  //берем второй элемент массива в svitch
  47.   end_if
  48.  
  49.   FOR ($n=1, $n<ARRSIZE($Keya))
  50.           //print($n)
  51.            //log_kvar()
  52.            if($Keya[$n]= $svitch)
  53.         Will()
  54.      END_IF
  55.   // WAITMS(20)
  56.   END_CYC
  57. END_CYC
  58.  
  59.  
содержимое файла koorda.csv
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

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #33 : Сентябрь 24, 2021, 04:42:58 am »
Хочу попробовать  сделать с оператором ISKEYDOWN
не понимаю, почему вот этот код работает
если нажать "q" то печатает "опа"

Код: Clickermann
  1. LOGCLEAR
  2. $csv = "koorda.csv"
  3. strseparate(TFREAD($csv, 5), ",", $Key1)
  4. WHILE(1)
  5.   $key= $Key1[1]// 81 значение кнопки q
  6.   if(ISKEYDOWN($key)=1)//нажата ли
  7.      print("опа")
  8.   end_if
  9.   WAITMS(50)
  10. END_CYC


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

Код: Clickermann
  1. SUB(Will)
  2.   //подпрограмма установки мыши с зажатой лкм на нужную координату
  3.   LUP($_xmouse, $_ymouse)
  4.   WAITMS(10)
  5.   LDOWN($X[$N], $Y[$N])
  6.   print("координаты ", $X[$N],",", $Y[$N])
  7.  
  8. END_SUB
  9.  
  10. SUB(log_kvar)
  11.   LOGCLEAR
  12.   print($Names[n],"$key1[$n]=" $key1[$n])
  13. END_SUB
  14.  
  15. LOGCLEAR
  16.  
  17. $csv = "koorda.csv"          //задаем имя файла с координатиами
  18. //читаем строки  файла в массивы
  19. //strseparate(TFREAD($csv, 2), ",", $Names)
  20. strseparate(TFREAD($csv, 3), ",", $X)
  21. strseparate(TFREAD($csv, 4), ",", $y)
  22. strseparate(TFREAD($csv, 5), ",", $Key1)
  23. //strseparate(TFREAD($csv, 6), ",", $Key2)
  24. //trseparate(TFREAD($csv, 7), ",", $Key3)
  25. print("массив создан")
  26. print("$key1[1]=",$key1[1])
  27.  
  28.  
  29.  
  30. WHILE(1)                                    // начало бесконечного цикла
  31.  
  32.   FOR ($n=1, $n<ARRSIZE($Key1)+1)
  33.      $iskey= $key1[$n]
  34.      if(ISKEYDOWN($iskey)=1)//нажата ли
  35.         log_kvar()
  36.         Will()
  37.      end_if
  38.      WAITMS(50)
  39.   END_CYC
  40. END_CYC
  41.  
  42.  

upd разобрался. в 32-й строке счетчик вылетает за пределы массива.
« Последнее редактирование: Сентябрь 28, 2021, 05:26:26 am от Ivankak »

Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #34 : Сентябрь 24, 2021, 06:02:34 am »
вот этот код работает сносно.

Код: Clickermann
  1. SUB(Will)
  2.   //подпрограмма установки мыши с зажатой лкм на нужную координату
  3.   LOGCLEAR
  4. LUP($_xmouse, $_ymouse)
  5.   WAITMS(10)
  6.   LDOWN($X[$N], $Y[$N])
  7.   print("$Names=", $Names[$n])
  8. print("координаты ", $X[$N],",", $Y[$N])
  9.  
  10. END_SUB
  11.  
  12. LOGCLEAR
  13.  
  14. $csv = "koorda.csv"          //задаем имя файла с координатиами
  15. //читаем строки  файла в массивы
  16. strseparate(TFREAD($csv, 2), ",", $Names)
  17. strseparate(TFREAD($csv, 3), ",", $X)
  18. strseparate(TFREAD($csv, 4), ",", $y)
  19. strseparate(TFREAD($csv, 5), ",", $Keya)
  20. //strseparate(TFREAD($csv, 6), ",", $Keyb)
  21. //trseparate(TFREAD($csv, 7), ",", $Keyc)
  22. print("массив создан")
  23. print("$keya[1]=",$keya[1])
  24.  
  25.  
  26.  
  27. WHILE(1)                                    // начало бесконечного цикла
  28.  
  29.   FOR ($n=1, $n<ARRSIZE($Keya))
  30.      if(ISKEYDOWN($keya[$n])=1)//если нажата одна из кнопок массива Keya то
  31.         Will()                //исполнить подпрограмму
  32.         WHILE(iskeydown($keya[$n]) = 1)  //если клавиша все еще нажата, то подвисаем тут пока не отпустит
  33.            waitms(50)
  34.         END_CYC
  35.      end_if
  36.      WAITMS(10)
  37.   END_CYC
  38. END_CYC              
  39.  
koorda.csv
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 массивов будет усложнение, а не упрощение.
Я где-то прочитал, что скрипт Кликермана может быть скомпилирован. Как это делается?
« Последнее редактирование: Сентябрь 24, 2021, 06:16:36 am от Ivankak »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3742
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #35 : Сентябрь 24, 2021, 12:45:02 pm »
ISKEYDOWN($arr[$n]) не срабатывает почему-то

А так?
Код: Clickermann
  1. ISKEYDOWN(INT($arr[$n]))


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

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

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

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


Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #36 : Сентябрь 24, 2021, 06:27:40 pm »
Цитировать
Лучше самому преобразовать для нужного диапазона символов. Вот цифры и буквы:
Код: Clickermann
Код: Clickermann
  1. $liters = "0123456789:::::::ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2. $code = STRPOS($liters, "Z") + 47
  3. print
($code).

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


Цитировать
А так?

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

Цитировать
Только в версии 4.14
Код: Clickermann
Код: Clickermann
  1. print(CODE("A"))
А если с переменной из массива, то как записать?

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

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







Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #37 : Сентябрь 24, 2021, 11:58:15 pm »
Цитировать
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
вот она приблуда для расширения. Их можно несколько подключить.
https://www.aliexpress.com/item/32957655097.html


Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: автоматизация в Давинчи
« Ответ #38 : Сентябрь 28, 2021, 12:02:04 am »
Как сделать чтоб имя переменой само было бы переменной?
как исправить строку 20, чтоб она печатала то же, что и 21?

Код: Clickermann
  1. $arr[0]= "Маши"
  2. $arr[2]= "Пети"
  3. $arr[2]= "Васи"
  4.  
  5. $str= "Сумка"
  6.  
  7. //Массивы, что в сумке?
  8. $СумкаМаши[0]= "печенье"
  9. $СумкаМаши[1]= "помада
  10. $СумкаМаши[2]= "расчёска"
  11.  
  12. $СумкаПети[0]= "машинка"
  13. $СумкаПети[1]= "гайка"
  14. $СумкаПети[2]= "петарда"
  15.  
  16. $СумкаВаси[0]= "расческа"
  17. $СумкаВаси[1]= "шарик"
  18. $СумкаВаси[2]= "ручка"
  19.  
  20. print(STRCONCAT("$",$str,$arr[0],[2]))
  21. print($СумкаМаши[2])
  22. waitms(50)
  23.  
  24. halt

Ivankak

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

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


Код: Clickermann
  1. SUB(Will)
  2.   //подпрограмма установки мыши с зажатой лкм на нужную координату
  3.   LOGCLEAR
  4.   LUP($_xmouse, $_ymouse)
  5.   WAITMS(10)
  6.   LDOWN($X[$N], $Y[$N])
  7.   print("$Names=", $Names[$n])
  8.   print("координаты ", $X[$N],",", $Y[$N])
  9.  
  10. END_SUB
  11.  
  12. LOGCLEAR
  13.  
  14. $csv = "koorda.csv"          //задаем имя файла с координатиами
  15. //читаем строки  файла в массивы
  16. strseparate(TFREAD($csv, 2), ",", $Names)
  17. strseparate(TFREAD($csv, 3), ",", $X)
  18. strseparate(TFREAD($csv, 4), ",", $y)
  19. strseparate(TFREAD($csv, 5), ",", $Keya)
  20. //strseparate(TFREAD($csv, 6), ",", $Keyb)
  21. //trseparate(TFREAD($csv, 7), ",", $Keyc)
  22. print("массив создан")
  23. print("$keya[18]=",$keya[18])
  24.  
  25.  
  26. $SHIFT=1
  27. WHILE(1)                                   // начало бесконечного цикла
  28.   FOR($S=49,$s<53) //значения кнопок 1-4
  29.      IF(ISKEYDOWN($s)=1)
  30.         WHILE(iskeydown($s)=1)  //если клавиша все еще нажата, то подвисам тут пока не отпустит
  31.            waitms(10)
  32.         END_CYC
  33.  
  34.         $n=($s-49)*6+1
  35.        Will()
  36.        $SHIFT=$n
  37.  
  38.      end_if
  39.   END_CYC
  40.  
  41.  
  42.  
  43.   FOR ($n=$SHIFT, $n<$SHIFT+6)
  44. //  PRINT($SHIFT, " " ,$N)
  45.      if(ISKEYDOWN($keya[$n])=1)//если нажата одна из кнопок массива Keya то
  46.         Will()                //исполнить подпрограмму
  47.         WHILE(iskeydown($keya[$n]) = 1)  //если клавиша все еще нажата, то подвисам тут пока не отпустит
  48.            waitms(10)
  49.         END_CYC
  50.      end_if
  51.      WAITMS(10)
  52.   END_CYC
  53. END_CYC
  54.  


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

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
« Последнее редактирование: Сентябрь 28, 2021, 02:05:37 pm от Ivankak »

Vint

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

А если с переменной из массива, то как записать?
Как обычно
Код: Clickermann
  1. print(CODE($arr[100]))

Работает ли мой код у вас?
Без понятия. У меня же нет Давинчи. Если только по скрину поелозить, так нужно координаты переделывать, там же всё захордкоржено.

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

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


Vint

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

Код: Clickermann
  1. $arr[0]= "Маши"
  2. $arr[2]= "Пети"
  3. $arr[2]= "Васи"
  4.  
  5. $str= "Сумка"
  6.  
  7. //Массивы, что в сумке?
  8. $СумкаМаши[0]= "печенье"
  9. $СумкаМаши[1]= "помада
  10. $СумкаМаши[2]= "расчёска"
  11.  
  12. $СумкаПети[0]= "машинка"
  13. $СумкаПети[1]= "гайка"
  14. $СумкаПети[2]= "петарда"
  15.  
  16. $СумкаВаси[0]= "расческа"
  17. $СумкаВаси[1]= "шарик"
  18. $СумкаВаси[2]= "ручка"
  19.  
  20. print(STRCONCAT("$",$str,$arr[0],[2]))
  21. print($СумкаМаши[2])
  22. waitms(50)
  23.  
  24. halt
http://crapware.aidf.org/forum/index.php?topic=5612.msg36775#msg36775


Vint

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


Vint

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


Ivankak

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

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

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

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

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

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

Код: Clickermann
  1. LOGCLEAR
  2.  
  3. $csv = "koorda.csv"
  4.  
  5. strseparate(TFREAD($csv, 2), ",", $Names)
  6. strseparate(TFREAD($csv, 3), ",", $X)
  7. strseparate(TFREAD($csv, 4), ",", $y)
  8.  
  9.  
  10. for ($n=7, $n<ARRSIZE($names))
  11.   print ($names[$n])
  12.   WHILE(iskeydown(#q) = 0)
  13.      waitms(20)
  14.   END_CYC
  15.   WHILE(iskeydown(#q)=1)
  16.      print ("нажата"," ",$n)
  17.      waitms(20)
  18.      WHILE(iskeydown(#q) = 1)  //тут пока не отпустит
  19.         waitms(50)
  20.      END_CYC
  21.  
  22.      $x[$n]= $_xmouse
  23.      $y[$n]= $_ymouse
  24.      print("x=",$x[$n],"y=",$y[$n],"$n=",$n)
  25.  
  26.  
  27.   END_CYC
  28. END_CYC
  29.  
  30. for ($n=0, $n<ARRSIZE($names))
  31.   print($x[$n],", ")
  32.   print($y[$n],", ")
  33. END_CYC
  34. $Xstr=$x[0]
  35. $ystr=$y[0]
  36. for ($n=1, $n<ARRSIZE($names))
  37.  
  38.   $Xstr= STRCONCAT($Xstr,",", $x[$n])
  39.   $Ystr= STRCONCAT($Ystr,",", $Y[$n])
  40.  
  41. END_CYC
  42. print($Xstr)
  43. print($Ystr)
  44.  
  45. $scva= "ko.csv"
  46.  
  47. TFDELETE($scva, 3 )
  48. TFWRITE ($scva, $xstr, 3 )
  49. TFDELETE($scva, 4 )
  50. TFWRITE ($scva, $ystr, 4 )
  51.  
  52. halt
  53.  

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

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

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

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

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

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