Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Тема начата: Ivankak от Сентябрь 11, 2021, 05:53:23 pm

Название: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 11, 2021, 05:53:23 pm
Здравствуйте.
Если вы использовали Dasvinchi resolv, то знаете, что у него есть вот такая панель цветокорекции и нету шоткатов длят упраления ей.
Вместо этого Блек мэджик продет за несколько тысяч долларов специальный девайс.

(https://c.radikal.ru/c23/2109/20/f135cd685352.png) (https://radikal.ru)
есть вот такой девайс
(https://c.radikal.ru/c29/2109/e1/7dddfc321e48t.jpg) (https://c.radikal.ru/c29/2109/e1/7dddfc321e48.png)

Есть желание с его помощью крутить цветовые колеса и другие значения в этом окне.
Задача облегчается тем, что эти элементы управления всегда на своих местах

То есть я себе работу скрипта представляю так
определяем кнопки на клавиатуре (или сочетания) например в соответствии с названиями кругов на картинке
1 -sadow
2-Midtone
3-Highlights
4-offset

запускаем цикл
ожидает нажатия кнопки
        когда кнопка нажата, то даем команду отпустить все кнопки мыши и команду курсор мыши позициоровать в центр выбранного круга по координатам. (какого - определили выше
        эмулируется нажатие лкм
              пользователь имеет возможность покрутить трекбол и Давинчи должен отработать это смещение курсора мыши, нормальным образом
        если пользователь крутанул колесо, то отжать лкм, курсор сместить на крутилку для колеса
        если пользователь тронул шарик, то возвратить курсор на центр последнего выбранного круга
           
    конец цикла

Также в скрипт надо добавить возможность таким же образом позиционировать курсор и менять значение для цифровых полей. (белый, красный, зеленый, синий) и по 6 значений вверху и внизу.
Логика такая же - позиционировать курсор, эмулировать зажатие лкм, предоставить пользователю крутить шарик трекбола, ждать следующего нажатия.

Я честно прочитал хэлп к кликерману, но не понял, как это запрограмировать. У меня вообще очень маленький опыт программирования.

Вообще можно сделать, чтобы кликерман удерживал лкм нажатой и при этом давал двигать курсор пользователю?
как указать в каком окне скрипт должен работать?
Каким оператором лучше распознавать нажатие клавиши или клавиатурного сочетания?
Можно ли сделать, чтобы в каком-то случае нажатия клавиш не доходили до Давнчи и он не отрабатывал их, как свои шоткаты?
Как правильно организовать цикл для такой задачи?


Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 13, 2021, 10:31:46 am
Шар трекбола - это то же самое что и перемещение мыши? А колесо - это колесо мыши? Просто никогда не было трекбола в пользовании.

Тогда
если пользователь тронул шарик
Это можно отследить. Отследить положение курсора. Только шар трекбола и мышь это одно и то же. От движений мышью не отделить.

если пользователь крутанул колесо
А это - нет. В кликере нельзя отследить вращение колеса мыши. Так сложилось. Думаю само кручение отследить было просто, но само использование в скриптах было бы сложным в настройке и неправильным в записях. Потому, что работа колеса может зависеть от активного окна и от положения курсора.
Нужно искать другой выход, горячие кнопки для переключения или перемещение в указанную область. Короче, надо думать.


Вообще можно сделать, чтобы кликерман удерживал лкм нажатой и при этом давал двигать курсор пользователю?
Можно. Просто команда на зажатие кнопки.

как указать в каком окне скрипт должен работать?
Лучше пока этого не касаться, эта тема сложнее и с кучей ограничений, да и не нужно это здесь.

Каким оператором лучше распознавать нажатие клавиши или клавиатурного сочетания?
Есть два оператора ISKEYDOWN и GETKEYSDOWN. Что из них лучше, зависит от ситуации. В большинстве, без разницы.

Можно ли сделать, чтобы в каком-то случае нажатия клавиш не доходили до Давнчи и он не отрабатывал их, как свои шоткаты?
Нет. Можно только отключить/включить на время всю клавиатуру и все кнопки для всех программ. При этом программные нажатия кнопок будут работать.

Как правильно организовать цикл для такой задачи?
Обычный бесконечный цикл WHILE

P.S. Пока гуглил трекболы... Kensington Expert Mouse Trackball
(https://i.ibb.co/hgNB3HB/Kensington-Expert-Mouse-Trackball.jpg) (https://ibb.co/Fh15RJ5)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 16, 2021, 01:33:31 am
(https://c.radikal.ru/c25/2109/0b/c51dc7ba3db5t.jpg) (https://c.radikal.ru/c25/2109/0b/c51dc7ba3db5.jpg)
получилась такая блок - схема.  скачать PDF  (https://disk.yandex.ru/i/MrpivG37MAVd3A)
Я пока очень плохо ориентируюсь возможностях языка. подскажите пожалуйста конкретные операторы.
какой механизм лучше использовать для опроса клавиш, чтобы меньше нагружать процессор?
если нажата "А" сделатть то-то..
Если нажата "Б" сделать другое..
И так 10 или больше вариантов
Оптимально ли будет использоватб  IF ... END_IF?
Или SWITCH ... END_SWITCH?
или другую конструкцию?

Мне надо следить за тем была ли сдвинута мышь, было ли повернуто колесо мыши и за тем не была ли нажата одна из нужных клавиш.
Не могу найти оператор, который отдает координаты мыши.
Не могу найти оператор, который сообщает о повороте колеса мыши.
можно ли использовать что-то вроде функции win API mouse_event MOUSEEVENTF_WHEEL (Кнопка колеса повернута)или MOUSEEVENTF_MOVE(Произошло движение) ?
может есть готовый плагин, который дополняет язык этими возможностями?
Вижу, что есть работа с массивами, но не могу найти, как задать массив, как обратиться к  элементу по строке и столбцу. Или массив это всегда строка?
Есть оператор INIREAD Функция. Считывает параметр из файла конфгурации (*.ini) Можно ли задать массив в таком ini файле? (как?)

Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 16, 2021, 01:37:29 am
Да, трекбол и мышь одинаково управляют курсором.

Не нашел оператора для получения координат курсора. Как узнать, что пользователь тронул мышь?
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 16, 2021, 04:38:02 pm
Справка -- >> Язык сценариев -->> Введение -> Перечень служебных переменных
$_xmouse Текущие координаты мыши по оси Х
$_ymouse Текущие координаты мыши по оси Y

Примерный сценарий
Код: Clickermann
  1. // запоминаем текущее положение курсора
  2. $xm_old = $_xmouse
  3. $ym_old = $_ymouse
  4.  
  5. WHILE(1)
  6.    // основной скрипт
  7.  
  8.    // когда нужно проверить сместился ли курсор, проверяем так
  9.    IF(($_xmouse != $xm_old) | ($_ymouse != $ym_old))
  10.        LOGWRITE("Курсор сместился")    
  11.    END_IF
  12.    WAITMS(50)
  13. END_CYC
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 16, 2021, 05:57:20 pm
Я пока очень плохо ориентируюсь возможностях языка. подскажите пожалуйста конкретные операторы.
какой механизм лучше использовать для опроса клавиш, чтобы меньше нагружать процессор?
если нажата "А" сделатть то-то..
Если нажата "Б" сделать другое..
И так 10 или больше вариантов
Оптимально ли будет использоватб  IF ... END_IF?
Или SWITCH ... END_SWITCH?
или другую конструкцию?
Без разницы

Раскидал по всем темам, теперь отследить не успеваешь.

Не могу найти оператор, который отдает координаты мыши.
http://crapware.aidf.org/forum/index.php?topic=5603.msg36707#msg36707

Мне надо следить за тем была ли сдвинута мышь, было ли повернуто колесо мыши и за тем не была ли нажата одна из нужных клавиш.
Не могу найти оператор, который сообщает о повороте колеса мыши.
Всё рассказывал здесь http://crapware.aidf.org/forum/index.php?topic=5603.msg36703#msg36703

Вижу, что есть работа с массивами, но не могу найти, как задать массив, как обратиться к  элементу по строке и столбцу. Или массив это всегда строка?
В справке же есть всё. Есть операторы. Есть в разделе "Введение" внизу часть про массивы. Там же есть ссылка
http://crapware.aidf.org/forum/index.php?topic=319.0

Про многомерные массивы
http://crapware.aidf.org/forum/index.php?topic=321.msg2686#msg2686
http://crapware.aidf.org/forum/index.php?topic=1138.msg5115#msg5115
http://crapware.aidf.org/forum/index.php?topic=2909.msg19070#msg19070

Есть оператор INIREAD Функция. Считывает параметр из файла конфгурации (*.ini) Можно ли задать массив в таком ini файле? (как?)
Формат ini файлов подразумевает секции и в них параметр=значение
Никаких массивов там нет. Можешь хранить одномерный массив объединив значения через разделитель при записи и так же разделяя при чтении.
Не проблема так хранить
Код: Clickermann
  1. var1=значение_1,значение_2,значение_3
  2. $str = INIREAD("config.ini", "var1")
  3. STRSEPARATE($str, ",", $arr)

Можно хранить массив в отдельном файле,  каждое значение массива на новой строке. Есть операторы для чтения записи TFREADARR, TFWRITEARR.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 16, 2021, 06:21:44 pm
По блок схеме набросок
Код: Clickermann
  1. $N = 0
  2. $xm_old = $_xmouse
  3. $ym_old = $_ymouse
  4.  
  5. SUB(Will)
  6.    LUP($_xmouse, $_ymouse)
  7.    WAITMS(100)
  8.    LDOWN($X[$N], $Y[$N])
  9.    WAITMS(100)
  10. END_SUB
  11.  
  12. WHILE(1)
  13.    IF(($_xmouse != $xm_old) | ($_ymouse != $ym_old))
  14.        // LOGWRITE("Курсор сместился")
  15.        IF($N != 0)
  16.            Will()
  17.            $xm_old = $_xmouse
  18.            $ym_old = $_ymouse
  19.        END_IF
  20.    END_IF
  21.  
  22.  
  23.    GETKEYSDOWN($keys)
  24.    IF(ARRSIZE($keys) > 0)
  25.        $key_code = $keys[0]
  26.        IF($key_code >= 48) & ($key_code <= 57)
  27.            $key = $key_code - 48
  28.            $N = $key
  29.            print("Нажата кнопка ", $key)
  30.  
  31.            IF($key > 0)
  32.                Will()
  33.            END_IF
  34.  
  35.        END_IF
  36.    END_IF
  37.  
  38.    // С колесом нужно что-то делать
  39.    WAITMS(20)
  40. END_CYC
  41.  
  42. HALT

Непонятно что за куча массивов справа.

В начале схемы, кажется сделано плохо. Сначала нужно определить если N не равно 0, тогда только определять сместился ли курсор.

С колесом не знаю что делать. Нет функции его определения.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 17, 2021, 02:54:59 am
сори, не могу понять синтаксис
вы писали
Цитировать
Формат ini файлов подразумевает секции и в них параметр=значение
Никаких массивов там нет. Можешь хранить одномерный массив объединив значения через разделитель при записи и так же разделяя при чтении.
Не проблема так хранить
Код: Clickermann

Код: Clickermann
  1. var1=значение_1,значение_2,значение_3
  2. $str = INIREAD("config.ini", "var1")
  3. STRSEPARATE($str, ",", $arr)


Не очень понимаю, что значит" никаких массивов там нет"
1. как хранить данные в ini файле
из описания в хэлпе я понял, что одна строка - одно значение, обращаться по номеру строки. А тут вы описываете другую конструкцию. Не могли бы вы прояснить:
как выглядят секции?
Первая строка в в этом примере и есть секция из ini файла и сам файл будет иметь следующее содержание?
var1=значение_1,значение_2,значение_3
var2=значение_1,значение_2,значение_3
.....
varN=значение_1,значение_2,значение_3

Будут ли проигнорированы пробелы и знаки табуляции? (например "12 , 34 , 5 ")
Можно ли таким образом в одном ini файле задать весь двумерный массив (по строкам) или надо все же отдельный ini на каждую строку?
(было бы удобно задавать массив прямо из csv файла с разделителями - запятыми)
Правильно ли я понимаю, что надо будет в программе записать столько операторов INIREAD, сколько строк в массиве или можно в одном операторе прочитать весь массив?



Пытаюсь также понять, как задавать массив в теле программы. скопировал код из хелпа.

Код: Clickermann
  1. $str = "12,45,56" // без кавычек не работает. Как язык отличает это строковые значения или числовые? Если стоят кавычки, то в массиве все равно числа?
  2. strseparate($str, ",", $arr)
  3. print($x[1])

я вижу две переменных $str и $arr, но не очень понимаю, как их использовать
str - входная строка / что это за переменная? она появляется только для объявления строки?
$arr - выходной массив / в этом месте происходит объявление массива? А если мне надо 2 строки, то strseparate писать после каждой строки? А если одномерный массив, то зачем 2 переменных и str и arr?

Как задать несколько строк в двумерном массиве?
Если не сложно, пожалуйста напишите пример, как задать одномерный и двухмерный массив.


Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 17, 2021, 04:19:12 am
Спасибо за код.
Массив это координаты органов управления Давинчи, на которые надо позиционировать курсор.
N - это переменная, условный номер органа управления для удобства она номер элемента в массиве, где хранятся координаты.
Вот картинка - номера не обязательно в таком порядке, просто для ясности.
(https://a.radikal.ru/a11/2109/b7/d6b6fc82d49f.jpg) (https://radikal.ru)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 17, 2021, 04:53:51 am
по поводу колеса мыши.
 http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562 (http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562)
Цитировать
"Количество функций Clickermann`а неуклонно продолжает расти, но необходимо очень много времени, чтоб можно было сделать свои обертки на все функции Windows. А теперь, когда появилась эта функция мы можем на прямую работать с интерфейсами окошек. И использовать максимум функционала."
далее по ссылке говорится, что можно использовать напрямую коды winapi из windows для команды POSTMESSAGE

означает ли это, что можно для команды GETMESSAGE также использовать коды?
тут https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-mouse_event (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-mouse_event)
код для события поворот колеса
MOUSEEVENTF_WHEEL
0x0800
Колесо было перемещено, если у мыши есть колесо. Величина движения указывается в dwData

аналогично для проверки движения мыши можно использовать событие
MOUSEEVENTF_MOVE
0x0001
Произошло движение.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 09:53:15 am
по поводу колеса мыши.
 http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562 (http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562)
Цитировать
"Количество функций Clickermann`а неуклонно продолжает расти, но необходимо очень много времени, чтоб можно было сделать свои обертки на все функции Windows. А теперь, когда появилась эта функция мы можем на прямую работать с интерфейсами окошек. И использовать максимум функционала."
далее по ссылке говорится, что можно использовать напрямую коды winapi из windows для команды POSTMESSAGE

означает ли это, что можно для команды GETMESSAGE также использовать коды?
тут https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-mouse_event (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-mouse_event)
код для события поворот колеса
Нет, нельзя. В справке же написано что POSTMESSAGE "Посылает окну системное сообщение". Только посылает, никакие ответы не получает.
По ссылке и нет никаких кодов. Это функция на C++ которую можно вызвать и получить значения. Кликером это не сделать в стандартном функционале. Может можно на dll? но это к другим.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 10:39:56 am
сори, не могу понять синтаксис
Не очень понимаю, что значит" никаких массивов там нет"
1. как хранить данные в ini файле
из описания в хэлпе я понял, что одна строка - одно значение, обращаться по номеру строки. А тут вы описываете другую конструкцию. Не могли бы вы прояснить:
как выглядят секции?
Первая строка в в этом примере и есть секция из ini файла и сам файл будет иметь следующее содержание?
var1=значение_1,значение_2,значение_3
var2=значение_1,значение_2,значение_3
.....
varN=значение_1,значение_2,значение_3
Вот так и нет. Одна строка - одно значение. Обращаться не по номеру строки, нет там такого. Обращение идёт по имени секции и имени параметра.

Формат ini
Код: PHP
  1. [Section1]
  2. par1=значение1
  3. par2=значение2
  4. par3=значение3
  5.  
  6. [Section2]
  7. par1=значение4
  8. par5=значение5
  9. par6=значение6

Имена параметров в одной секции уникальные. Определённое имя - только одно. В разных секциях могут быть одинаковые имена параметров.
Кодировка файла ini win1251.

Читаем параметр "par1" из одной секции 1 и из секции 2
Код: Clickermann
  1. $var1 = INIREAD("config.ini", "par1", "Section1")
  2. $var2 = INIREAD("config.ini", "par1", "Section2")

Массивов здесь нет. Можно кликером собрать массив в строку через разделитель и записать эту строку как значение. На выходе разделив обратно.

Будут ли проигнорированы пробелы и знаки табуляции? (например "12 , 34 , 5 ")
Не будут. Всё перейдёт в значение. Но при извлечении из массива это не помешает их переводу в числа (пробелы точно). В более старых версиях мешало. Поэтому я привык пробелы не оставлять если строка будет биться по разделителю.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 11:00:51 am
Код: Clickermann
  1. $str = "12,45,56" // без кавычек не работает. Как язык отличает это строковые значения или числовые?
Конечно не работает. Все строки должны быть заключены в кавычки.
Если значение можно перевести в число, то переведёт, если нельзя - останется строкой.

Если стоят кавычки, то в массиве все равно числа?
Если можно перевести в число - то будут число.

Вот тест
Код: Clickermann
  1. $str = "12, 45, 56"
  2. strseparate($str, ",", $arr)
  3. print("==", $arr[2], "==")  // == в начале и конце чтобы видны были пробелы
  4. print($arr[2] + 10, "   сложение выполняется")
  5.  
  6. IF($arr[2] = 56)
  7.    print("равно")
  8. ELSE
  9.    print("НЕ равно")
  10. END_IF
  11.  
  12. HALT

Вывод:
Цитировать
11:00:04 == 56==
11:00:04 66   сложение выполняется
11:00:04 равно
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 12:03:36 pm
$str - входная строка / что это за переменная? она появляется только для объявления строки?
$arr - выходной массив / в этом месте происходит объявление массива?
Да.
Да.
$str можно не задавать и писать строку прямо в
Код: Clickermann
  1. strseparate("12,45,56" ",", $arr)
Но это неудобно если строка длянная или получается откуда-то извне.

А если одномерный массив, то зачем 2 переменных и str и arr?
Непереводимая игра слов  :)


Код: Clickermann
  1. $str = "12,45,56" // без кавычек не работает. Как язык отличает это строковые значения или числовые? Если стоят кавычки, то в массиве все равно числа?
  2. strseparate($str, ",", $arr)
  3. print($x[1])

Как задать несколько строк в двумерном массиве?
Если не сложно, пожалуйста напишите пример, как задать одномерный и двухмерный массив.
Это и есть пример задания одномерного массива. Только принт неправильный

Код: Clickermann
  1. // одномерный
  2. STRSEPARATE("12,45,56", ",", $one_dimensional_array)
  3.  
  4. LOGWRITE("Одномерный массив")
  5. LOGWRITE("Размер массива: ", ARRSIZE($one_dimensional_array))
  6. FOR($i=0, $i < ARRSIZE($one_dimensional_array))
  7.    LOGWRITE("[", $i, "] = ", $one_dimensional_array[$i])
  8. END_CYC
  9. LOGWRITE(" ")
  10.  
  11.  
  12. // псевдо-двумерный
  13. STRSEPARATE("1,2,3,4", ",", $two_dimensional_array)
  14. STRSEPARATE("10,20,30,40", ",", $two_dimensional_array)
  15. STRSEPARATE("100,200,300,400", ",", $two_dimensional_array)
  16.  
  17.  
  18. // выводим все элементы массива  $two_dimensional_array
  19. LOGWRITE("Двумерный массив")
  20. LOGWRITE("Размер массива: ", ARRSIZE($two_dimensional_array))
  21. FOR($i=0, $i < ARRSIZE($two_dimensional_array))
  22.    LOGWRITE("[", $i, "] = ", $two_dimensional_array[$i])
  23. END_CYC
  24. LOGWRITE(" ")
  25.  
  26. // выводим в двумерном виде  $two_dimensional_array
  27. LOGWRITE("Двумерный вид")
  28. $size = 4
  29. FOR($row=0, $row < ARRSIZE($two_dimensional_array) / $size)
  30.    $line = ""
  31.    FOR($col=0, $col < $size)
  32.        $n = $row * $size + $col
  33.  
  34.        // это для красивого вывода
  35.        FOR($i=0, $i < (3 - $row))
  36.            $line = STRCONCAT($line, " ")
  37.        END_CYC
  38.  
  39.        $line = STRCONCAT($line, $two_dimensional_array[$n])
  40.    END_CYC
  41.    LOGWRITE($line)
  42. END_CYC
  43.  
  44. HALT

Вывод:
12:00:52 Одномерный массив
12:00:52 Размер массива: 3
12:00:52 [0] = 12
12:00:52 [1] = 45
12:00:52 [2] = 56
12:00:52 
12:00:52 Двумерный массив
12:00:52 Размер массива: 12
12:00:52 [0] = 1
12:00:52 [1] = 2
12:00:52 [2] = 3
12:00:52 [3] = 4
12:00:52 [4] = 10
12:00:52 [5] = 20
12:00:52 [6] = 30
12:00:52 [7] = 40
12:00:53 [8] = 100
12:00:53 [9] = 200
12:00:53 [10] = 300
12:00:53 [11] = 400
12:00:53 
12:00:53 Двумерный вид
12:00:53    1   2   3   4
12:00:53   10  20  30  40
12:00:53  100 200 300 400
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 12:06:45 pm
Перенесу посты из темы "IF_PICTURE_IN - Для новичков" сюда. Нечего им там делать
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 17, 2021, 12:29:10 pm
Спасибо за код.
Массив это координаты органов управления Давинчи, на которые надо позиционировать курсор.
N - это переменная, условный номер органа управления для удобства она номер элемента в массиве, где хранятся координаты.
Вот картинка - номера не обязательно в таком порядке, просто для ясности.
(https://a.radikal.ru/a11/2109/b7/d6b6fc82d49f.jpg) (https://radikal.ru)
Это удобно столько горячих клавиш?

Я бы всю центральную часть разделил на 4 группы, а в каждой однотипные органы управления.
Выбрал 2 группу. Выбрал зелёный G и меняешь.  2--G
Выбрал 4 группу. Выбрал зелёный G и меняешь.  4--G

(https://i.ibb.co/ThrcsY0/image.png) (https://ibb.co/9YGn7c4)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 18, 2021, 12:05:26 am
Да, вы правы, сегодня как раз думал о назначении клавиш.
У меня была такая же мысль.
Возможно, я назначу их на дополнительную клавиатуру, где кнопки будут расположены соответствующим образом.

Моя картинка про количество элементов в массиве для хранения координат. Чтобы было понятно, о каком количестве проверок на нажатие разных клавиш. Их примерно 35, но скорее всего немного больше.


Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 22, 2021, 04:52:28 am
Внезапно "нашел" оператор TFREAD. Это позволяет сделать файл с координатами более читаемым и подготавливать его в Экселе или Open office Calc.
(https://b.radikal.ru/b37/2109/9c/0ec77b530c30.png) (https://radikal.ru)
тестовый файл с координатами имя файла koorda.csv, такой, как его сохраняет Open office Calc:
x,90,34,75,109,146,85
y,854,925,927,926,927,960
в начале нулевой элемент удобно обозначает координатную ось а первый элемент соответствует первому элементу управления.
Позже я сделаю в таблице строку с названиями элементов и строку с их номерами, но читать в массив их не буду. Использую только для ясности в таблице.

Код: Clickermann
  1. Print("test3----------------")
  2. $filename = "koorda.csv"          //задаем имя файла с координатиами
  3. $string = TFREAD($filename, 1)   //читаем первую строку
  4. Print($string)                    //печатаем прочитаную строку для контроля
  5. strseparate($string, ",", $arr)   //превращаем строку в массив
  6. print ($arr[2]  )                  //печатаем второй элемент
  7.  
  8. Print("test4----------------")
  9. strseparate(TFREAD("koorda.csv", 1), ",", $x)   //то же самое, но в одну строку
  10. print ("X1=",$x[1] )                             //печатаем первый элемент
  11. halt

9:00:06 test3----------------
9:00:06 x,90,34,75,109,146,85
9:00:06 34
9:00:06 test4----------------
9:00:06 X1=90

Запись в одну строку экономит память за счет того, что не объявляются переменные? Работает ли это быстрее чем длинная запись?

Возможно, стоит попробовать сделать отдельный скрипт для записи координат в файл, чтоб не вручную табличку делать, а потыкать мышью в интерфейс и по клавишам, и клавиши назначались, координаты сами собрались бы,  и записались в файл CSV, а его потом всегда можно открыть в Open office Calc и проверить и отредактировать.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 22, 2021, 09:02:12 am
Запись в одну строку экономит память за счет того, что не объявляются переменные? Работает ли это быстрее чем длинная запись?
Не имеет значения. На малых данных, как у тебя нет разницы, даже не стоит задумываться об экономии. А вот читаемость снижается. Код пишут 1 раз, а читают много.
Быстрее тоже не будет.

Возможно, стоит попробовать сделать отдельный скрипт для записи координат в файл, чтоб не вручную табличку делать, а потыкать мышью в интерфейс и по клавишам, и клавиши назначались, координаты сами собрались бы,  и записались в файл CSV, а его потом всегда можно открыть в Open office Calc и проверить и отредактировать.
Зачем пробовать, бери и делай, это не такой большой код как кажется, к нему не нужно готовится.
Так готовят данные не редко, глупо иметь инструмент автоматизации и готовить нуЖ/Дные данные вручную.

Мне кажется ты не с того начал. Рано подготавливать координаты для всех элементов. Сначала нужно проверить возможность  и сделать весь основной функционал на одном элементе. Может ты столкнёшся с трудностями которые изменят концепцию.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 22, 2021, 02:49:03 pm
Как дела с кодом?

Какие нибудь тесты делал? Что по управляемости?
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 22, 2021, 08:21:14 pm
Да, я сделал тесты. Еще в самом начале, В принципе работает. Есть небольшие странности. Когда мышью нажимаешь на центр цветового колеса, в Давинчи, то мышь начинает двигаться раза в 2 медленнее и за счет этого увеличивается точность выбора цвета.
но когда то же самое делаешь через кликерман, то при больших отклонениях мышь как бы "соскакивает" и цветовой курсор, белая точка, соскакивает к краю колеса.
 Но, возможно, что я тогда что-то нахомутал и причина не в кликермане.

Я очень медленно продвигаюсь каждый новый оператор требует много времени для понимания.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 22, 2021, 09:35:52 pm
Или неправильный скрипт или, если плохо подхватывает в начале, может ему нужно плавное заведение в зону, но это вряд ли.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 12:35:34 am
(https://d.radikal.ru/d13/2109/cd/05227694cbd3.png) (https://radikal.ru)

Думаю сделать какую-то такую клавиатуру на ардуино, чтоб не путаться в хоткеях.
желтые это N1-N4
сиреневая - колесо
 
Эту картинку набросал для ясности в разговоре. Ничего еще не проектировал.

Затея состоит в том, чтобы не пересекаться с шоткатами в давинчи.
Тогда можно будет назначить, чтоб эта клавиатура посылала коды нажатия любые. Например A+B+C.
Хочу выбрать какие-то несуразные сочетания, которых не может быть в нормальной жизни.

с определением одной клавиши нет вопросов- полно примеров.
Код: Clickermann
  1. //нажатие клавиши и устранение дребезга
  2. getkeysdown($kvar)
  3. getkeysdown($kvar1)
  4. WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
  5. getkeysdown($kvar1)
  6. waitms(15)
  7. END_CYC
  8.  
  9. SWITCH($kvar)
  10. CASE(#q)
  11.   print("Q")
  12. CASE(#w)
  13.   print("W")
  14. CASE(#e)
  15.   print("E")
  16. CASE(#R)
  17.   print("R")
  18. END_SWITCH
Однако, не могу понять, как определять нажатие сочетания клавиш.
что-то типа ctr+sift+a+b
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 01:45:42 am
Написал код. Почти все работает.
проблема в следующем: пока зажата лкм не реагирует на нажатия кнопок.

Нажимаю "1" (или другую назначенную клавишу) - курсор встает, куда надо и все работает.
Но после этого не реагирует на другие кнопки, пока не кликнешь лкм.



Код: Clickermann
  1. SUB(Will)                      //подпрограмма установки мыши с зажатой лкм на нужную координату
  2.    LUP($_xmouse, $_ymouse)
  3.    WAITMS(10)
  4.    LDOWN($X[$N], $Y[$N])
  5.     print("координаты ", $X[$N],",", $Y[$N])
  6.  
  7. END_SUB
  8.  
  9. LOGCLEAR
  10.  
  11. $csv = "koorda.csv"          //задаем имя файла с координатами
  12. strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
  13. print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
  14. strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $X
  15. print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
  16. strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $y
  17. print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
  18. print("массив создан успешно")
  19. print()
  20.  
  21.  
  22.  
  23. WHILE(1)                                    // начало бесконечного цикла
  24. //нажатие клавиши и устранение дребезга
  25. getkeysdown($kvar)      // задаем переменную - какая клавиша нажата
  26. getkeysdown($kvar1)
  27. WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
  28. getkeysdown($kvar1)
  29. waitms(15)
  30. END_CYC
  31.  
  32. SWITCH($kvar)     // по условию, какая клавиша нажата - ветвим процесс
  33. CASE(#1)
  34.   print("нажата 1")
  35.      $n=1          // задаем номер для координат из массива
  36.      print("позиция мыши ",$Names[$N])
  37.    Will()
  38. CASE(#2)
  39.   print("нажата 2")
  40.   $n=2
  41. print("позиция мыши ",$Names[$N])
  42.      Will()
  43. CASE(#3)
  44. print("нажата 3")
  45.   $n=3
  46.   print("позиция мыши ",$Names[$N])
  47.    Will()
  48. CASE(#4)
  49.   print("нажата 4")
  50.   $n=4
  51.   print("позиция мыши ",$Names[$N])
  52.      Will()
  53. CASE(#5)
  54.   print("нажата 5")
  55.   $n=5
  56.   print("позиция мыши ",$Names[$N])
  57.      Will()
  58. CASE(#6)
  59.   print("нажата 6")
  60.   $n=6
  61.   print("позиция мыши ",$Names[$N])
  62.      Will()
  63. END_SWITCH
  64. waitms(15)    
  65. END_CYC
  66. haltt
  67.  

потом опрос клавиш хочу убрать в цикл - для этого заготовлены строки в csv под коды клавиш Key code1-3

содержимое файла 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,925,927,926,927,960
Key code1,0,0,0,0,0,0
Key code2,0,0,0,0,0,0
Key code3,0,0,0,0,0,0
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 02:52:01 am
Возможно, лучше с крутилками делать пульт.
Однако, энкодеры дороже и в 3 раза больше ног на ардуино надо.
Идеально - начал крутить - мышь сама перепрыгнула, куда надо.
Похуже вариант - энкодеры с кнопкой нажал сверху, покрутил, следующий - нажал покрутил.
При такой стоимости разработки уже можно и трекбол туда засунуть....
Все равно дешевле в 10 раз чем самая дешевая панель от блекмэджик будет.
(https://a.radikal.ru/a06/2109/a7/741e3dc6951b.png) (https://radikal.ru)
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 23, 2021, 12:43:00 pm
Написал код. Почти все работает.
Нажимаю "1" (или другую назначенную клавишу) - курсор встает, куда надо и все работает.
Приведённый код не может работать. По крайней мере на моей системе. Кстати, какая у тебя версия кликера?

getkeysdown заполняет массив. Массивы вот так сравнивать нельзя
Код: Clickermann
  1. WHILE($kvar = $kvar1)

Если при использовании массива указать просто имя $kvar, то будет использоваться элемент с индексом 0
Т. е $kvar равносильно $kvar[0]

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

Так же в этот массив попадают и нажатые кнопки мыши (код 1, 2, 4)

Можешь посмотреть что попадает в массив, запустив такой код
Код: Clickermann
  1. SUB(log_kvar)
  2.    LOGCLEAR
  3.    LOGWRITE("$kvar:")
  4.    FOR($i=0, $i < ARRSIZE($kvar))
  5.        LOGWRITE("    ", $i, " : ", $kvar[$i])
  6.    END_CYC
  7. END_SUB
  8.  
  9. LOGCLEAR
  10.  
  11. WHILE(1)
  12.    GETKEYSDOWN($kvar)
  13.    log_kvar()
  14.    WAITMS(50)
  15. END_CYC

Твоё условие выше всегда выполняется
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 23, 2021, 12:55:29 pm
Возможно, лучше с крутилками делать пульт.
Однако, энкодеры дороже и в 3 раза больше ног на ардуино надо.
Идеально - начал крутить - мышь сама перепрыгнула, куда надо.
Похуже вариант - энкодеры с кнопкой нажал сверху, покрутил, следующий - нажал покрутил.

Прикольно. А разве у ардуино есть столько входов? Или там есть приблуды для расширения?

Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно. Минимум из схемы скрипта. Концепция использования поменялась?

Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.

Можно всё сделать там или чуть поднапрячся, написать больше кода и прокинуть нужные функции в кликер. Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 06:13:13 pm
Цитировать
. Кстати, какая у тебя версия кликера?
У меня Clickermann v4.13 x64.
Цитировать
Приведённый код не может работать. По крайней мере на моей системе
Это очень интересно. А хоть что-то происходит?

может ли быть такое, что пока зажата лкм командой
Код: Clickermann
  1. LDOWN($X[$N], $Y[$N])
кликерман не видит новых нажатий клавиш?

Цитировать
Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно.
Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши.

Код: Clickermann
  1. WHILE($kvar = $kvar1)
В моем коде затея состоит в том, что когда клавиша нажата долго, то первые элементы массивов становятся равны и цикл начинает крутиться создавая задержку. Но в момент отпускания они сразу становятся не равны и программа идёт дальше.
Но, теперь я понимаю, как надо сделать. Спасибо за пример.

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


Цитировать
Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.
Если дойдет до железа, то есть варианты.
Использовать кнопку для переключения на координаты.
Использовать вместо колеса мыши энкодер на пульте.
Все можно запрограммировать там и не нужно будет никакого софта на винде. И мышь подключать прямо к ней по PS2.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.

Цитировать
Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.
Да, это правда. Когда я рисовал схему, то полагал, что дополнительным условием для перемещения курсора по событиям мыши будет, какое из цветовых колес в интерфейсе было использовано последним. А когда эта часть работы будет выполнена, то вообще выключить использование этого скрипта. Может перевести в другой цикл, который только отслеживает свой шоткат, чтоб вернуться.


Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 06:15:32 pm
Цитировать
. Кстати, какая у тебя версия кликера?
У меня Clickermann v4.13 x64.
Цитировать
Приведённый код не может работать. По крайней мере на моей системе
Это очень интересно. А хоть что-то происходит?

может ли быть такое, что пока зажата лкм командой
Код: Clickermann
  1. LDOWN($X[$N], $Y[$N])
кликерман не видит новых нажатий клавиш?

Цитировать
Cкажи куда делось определение перемещения мыши? Ну и колеса, заодно.
Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши. Это вообще сомнительная плюшка в таком алгоритме работы. Если все переключется клавишами, то какой смысл одну единственную крутилку отлавливать с такими сложностями?

Код: Clickermann
  1. WHILE($kvar = $kvar1)
В моем коде затея состоит в том, что когда клавиша нажата долго, то первые элементы массивов становятся равны и цикл начинает крутиться создавая задержку. Но в момент отпускания они сразу становятся не равны и программа идёт дальше.
Но, теперь я понимаю, как надо сделать. Спасибо за пример.

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


Цитировать
Пока не дошло до железячной стадии, я тут смотрел на AutoIt есть функционал для определения вращения колеса мыши. Есть блокировка кликов, чтоб они не проходили к приложению и блокировка клавиатуры (это не тестил) - как раз можно при переключении на блок включать блокировку и простых хоткеев, не нужно будет монструозных A+B+C.
Если дойдет до железа, то есть варианты.
Использовать кнопку для переключения на координаты.
Использовать вместо колеса мыши энкодер на пульте.
Все можно запрограммировать там и не нужно будет никакого софта на винде. И мышь подключать прямо к ней по PS2.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.

Цитировать
Но нужно чётко определить в какие моменты ловить перемещения и кручение, а в какие нет. Ведь нормальное использование тоже крутит-перемещает. Из описания и блок-схемы эти моменты описаны неправильно, так пользоваться будет нельзя.
Да, это правда. Когда я рисовал схему, то полагал, что дополнительным условием для перемещения курсора по событиям мыши будет, какое из цветовых колес в интерфейсе было использовано последним. А когда эта часть работы будет выполнена, то вообще выключить использование этого скрипта. Может перевести в другой цикл, который только отслеживает свой шоткат, чтоб вернуться.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 23, 2021, 06:23:47 pm
Это очень интересно. А хоть что-то происходит?
Как и положено, доходит до цикла сдерживания и навечно там застревает. Правда, у меня версия везде x32


может ли быть такое, что пока зажата лкм командой
кликерман не видит новых нажатий клавиш?
Он у тебя застревает там же, только позже.


Это нужно было, чтоб программа сама, без нажатия кнопки, определяла и переключалась между этими двумя координатами
Если нет возможность определять вращение колеса, то нет смысла и определять смещение мыши.
Возможность есть. Сторонней программой. Но логика работы непонятна. Как отделить моменты.

.
А еще можно попросить кого-то написать dll, чтоб прикрутить доп события мыши.
Я dll, конечно, не напишу, но если не найдёшь, на AutoIt могу всё прикрутить.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 23, 2021, 07:11:57 pm
Цитировать
Он у тебя застревает там же, только позже.
я отключал этот цикл, без него тоже не видит нажатий. Он вообще не обязательный изыск.
но я сегодня заменю этот кусок на другой, на основе твоего примера, со сравнением  первых трех элементов массива поэлементно.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 24, 2021, 04:03:49 am
https://youtu.be/t8411_z0Gwc (https://youtu.be/t8411_z0Gwc)
записал видео, как у меня работало - из него видно, что если нажата лкм, то после этого переменная $svitch=1 это событие лкм.
Поскольку кнопки в массив помещаются по порядку величины, то это означает, что 0-й элемент массива это лкм, поскольку он =1
Тогда я ввел проверку - если 0-й элемен= 1, то использовать 1-й


 
 

Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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-й строке счетчик вылетает за пределы массива.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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 массивов будет усложнение, а не упрощение.
Я где-то прочитал, что скрипт Кликермана может быть скомпилирован. Как это делается?
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 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, но это не компиляция.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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 кругов, на которых я тренировался есть еще и другие панели на этом же месте, они немного отличаются, и есть переключения между ними. чтоб не запутаться надо дать им имена.
И надо, чтоб при выбранных  других панелях не было путаницы и не плодить кучу лишних шоткатов.
(http://a.radikal.ru/a04/2109/56/f13eae05cc05.jpg) (http://radikal.ru)

(http://a.radikal.ru/a07/2109/92/1f702a72167f.jpg) (http://radikal.ru)

(http://a.radikal.ru/a34/2109/71/8ba755486045.jpg) (http://radikal.ru)

(http://a.radikal.ru/a12/2109/8d/84254a253c4d.jpg) (http://radikal.ru)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 24, 2021, 11:58:15 pm
Цитировать
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
вот она приблуда для расширения. Их можно несколько подключить.
https://www.aliexpress.com/item/32957655097.html (https://www.aliexpress.com/item/32957655097.html)
(http://a.radikal.ru/a06/2109/2c/96bf971bfc58.png)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 28, 2021, 05:02:29 am
Сделал тестовую версию. Если кто-то попробует - пожалуйста, отпишитесь.
Работает пока 4-мя колесами во вкладке Primaries. Это просто тест. Потом будет остальное.
1-4 выбор колеса
помещает курсор на элемент управления и зажимает лкм. Чтобы использовать мышь свободно надо кликнуть.
пока программа работает она будет захватывать при нажатии кнопок курсор. остановить программу можно кнопкой стоп в Кликермане.
Alt+s не сработает, потому, что Давинчи перехватывает свой шоткат "добавить ноду после"

w - Y
e - R
r - G
t - B
y - крутилка под колесом
(http://d.radikal.ru/d02/2109/7a/f2c1b1977a22.jpg)

Код: 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/ (https://www.openoffice.org/)
кнопки можно переназначать в 5-й строке, которая начинается с "Keya" в соответствии с этой таблицей
https://github.com/sepehrsohrabi/Decimal-Virtual-Key-Codes (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
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 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 тоже не проблема вроде.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 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
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 28, 2021, 10:55:05 am
кнопки можно переназначать в 5-й строке, которая начинается с "Keya" в соответствии с этой таблицей
https://github.com/sepehrsohrabi/Decimal-Virtual-Key-Codes (https://github.com/sepehrsohrabi/Decimal-Virtual-Key-Codes)
В справке есть все эти коды
Язык сценариев -- >> Приложение 1. Коды клавиш
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 28, 2021, 11:10:14 am
Почему перешёл на ISKEYDOWN?
ISKEYDOWN хорошо, когда клавиш мало. Их уже 24 шт. Сейчас цикл сканирования 24 * 10 + ещё чуть ≈ 250 ms
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 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 , когда открываешь  в табличном редакторе - все видно наглядно- строки, столбцы.
(http://a.radikal.ru/a43/2109/5b/f34db0699150.png)
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 28, 2021, 02:25:40 pm
цикл сканирования 6 позиций. там есть сдвиг.
Но задержка возникает только если кнопка зажата. Если не зажата, то даже на 24 кнопки будет один раз 10мс.
Да, сдвиг же, 10 кнопок сканирует. Но 10 мс там прописано всегда 6*10 ++
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 28, 2021, 02:30:54 pm
Да, сдвиг же, 10 кнопок сканирует. Но 10 мс там прописано всегда 6*10 ++но задержка только если кнопка нажата, а иначе на оба цикла только одна задержка 10 мс
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 28, 2021, 02:48:15 pm
Нет. В том коде, что выложен на 6 кнопок всегда. Строка 51
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 28, 2021, 02:54:24 pm
правильно 1 раз 10мс на 2 цикла сначала4, а потом 6 кнопок.
И если туда добавить еще кнопок, то все равно будет только одна задержка.
что я не верно понимаю?
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 28, 2021, 03:33:13 pm
Если поменять местами 51 и 52 строки, то будет так, как ты говоришь. Сейчас 10 мс на каждую из 6 проверок.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 28, 2021, 10:53:18 pm
О! спасибо! А я прозевал.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 28, 2021, 11:59:29 pm
У профессиональных пультов для цветокора есть возможность крутить сразу 2 колеса, и они одновременно работают.
можно ли как-то кликерману прикрутить возможность управлять с 2-мя мышами с независимыми курсорами?
Хотя, зачем 2 мыши... Надо по очереди скакать туда - сюда. Если это делать достаточно часто, то есть шанс, что будет не заметно.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 29, 2021, 09:30:57 am
Проф пульты взаимодействуют с API программы и посылают в неё команды напрямую.
В системе курсор всего один, неоткуда взяться второму, это просто не предусмотрено в ОС.

Так скажи, нужно ли прокинуть события колеса и/или события перемещения?
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 29, 2021, 01:26:46 pm
Цитировать
Так скажи, нужно ли прокинуть события колеса и/или события перемещения?
это сделало бы работу удобнее.
Сейчас все изменения делаются вращением трекбола, а все указания координат кнопками.  Однако, если удастся получать событие поворота колеса мыши, то переключение по крайней мере между этими двумя органами можно будет делать автоматически.
(http://a.radikal.ru/a35/2109/2e/71361d8ec0a6.png)
А, что есть возможность добавить в кликерман функцию?

Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 29, 2021, 02:07:03 pm
Могу сделать на AutoIt и кидать сообщения кликеру при событиях. Так же, наверно нужно сделать включение/отключение слежения. А может и не надо.
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 29, 2021, 02:08:32 pm
Проф пульты взаимодействуют с API программы и посылают в неё команды напрямую.

API у Давинчи есть, но там очень мало команд описано. Самое вкусное они скрывают. Я полазил на форумах. Никто не знает, как получить доступ к этим функциям. Поэтому блекмэджик может продавать свои панели по $30 000.
https://alliedbroadcastgroup.com/product/blackmagic-design-davinci-resolve-advanced-panel/ (https://alliedbroadcastgroup.com/product/blackmagic-design-davinci-resolve-advanced-panel/)
Есть еще другие производители, например Tangetn и Avid, которые имеют доступ этим функциям. Но их пульты тоже не дешевы.
самая дешевая б\у панель стоит $350 и очень мало, чего может.
https://www.amazon.com/tangent-LYSB01G3UTBHS-CMPTRACCS-Tangent-Ripple-Panel/dp/B01G3UTBHS (https://www.amazon.com/tangent-LYSB01G3UTBHS-CMPTRACCS-Tangent-Ripple-Panel/dp/B01G3UTBHS)
Хотя, с другой стороны, она стоит, как три трекбола от kesington :)


Цитировать
В системе курсор всего один, неоткуда взяться второму, это просто не предусмотрено в ОС.
Есть всякие такие http://adminxp.ru/dva-kursora/ (http://adminxp.ru/dva-kursora/) методы сделать 2 курсора, но они не стабильны.
В 10й винде есть мультитач, значит есть возможность реагировать на несколько координат касания.
https://youtu.be/NnSJRRn8rQA (https://youtu.be/NnSJRRn8rQA)
Название: Re: автоматизация в Давинчи
Отправлено: Ivankak от Сентябрь 29, 2021, 02:16:03 pm
Могу сделать на AutoIt и кидать сообщения кликеру при событиях. Так же, наверно нужно сделать включение/отключение слежения. А может и не надо.
Если можно иметь такую возможность, то лучше ее иметь.
почитал вот эту тему.
http://crapware.aidf.org/forum/index.php?topic=305.msg2580#msg2580 (http://crapware.aidf.org/forum/index.php?topic=305.msg2580#msg2580)
А будет нормально работать, шустро?
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Сентябрь 29, 2021, 04:29:10 pm
Есть всякие такие http://adminxp.ru/dva-kursora/ (http://adminxp.ru/dva-kursora/) методы сделать 2 курсора, но они не стабильны.
В 10й винде есть мультитач, значит есть возможность реагировать на несколько координат касания.
https://youtu.be/NnSJRRn8rQA (https://youtu.be/NnSJRRn8rQA)

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

Мультитач не знаю как работает, может это альтернативный режим, либо курсор либо мультитач. На телефоне то курсора нет и в видео его нет. Тыкать, пожалуйсты тыкай, но чисто по экрану. Может там какая расширенная версия API для этого.
Название: Re: автоматизация в Давинчи
Отправлено: Vint от Октябрь 05, 2021, 06:41:07 pm
Если можно иметь такую возможность, то лучше ее иметь.

А будет нормально работать, шустро?

Сделал
http://crapware.aidf.org/forum/index.php?topic=5613.0
Если будут вопросы, пиши.