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

Основной раздел => Общие вопросы => Topic started by: Ivankak on September 11, 2021, 05:53:23 PM

Title: автоматизация в Давинчи
Post by: Ivankak on September 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 значений вверху и внизу.
Логика такая же - позиционировать курсор, эмулировать зажатие лкм, предоставить пользователю крутить шарик трекбола, ждать следующего нажатия.

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

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


Title: Re: автоматизация в Давинчи
Post by: Vint on September 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)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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 файле? (как?)

Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 16, 2021, 01:37:29 AM
Да, трекбол и мышь одинаково управляют курсором.

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

Примерный сценарий
Code: (clickermann) [Select]
// запоминаем текущее положение курсора
$xm_old = $_xmouse
$ym_old = $_ymouse

WHILE(1)
    // основной скрипт
   
    // когда нужно проверить сместился ли курсор, проверяем так
    IF(($_xmouse != $xm_old) | ($_ymouse != $ym_old))
        LOGWRITE("Курсор сместился")   
    END_IF
    WAITMS(50)
END_CYC
Title: Re: автоматизация в Давинчи
Post by: Vint on September 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 файлов подразумевает секции и в них параметр=значение
Никаких массивов там нет. Можешь хранить одномерный массив объединив значения через разделитель при записи и так же разделяя при чтении.
Не проблема так хранить
Code: (clickermann) [Select]
var1=значение_1,значение_2,значение_3
$str = INIREAD("config.ini", "var1")
STRSEPARATE($str, ",", $arr)

Можно хранить массив в отдельном файле,  каждое значение массива на новой строке. Есть операторы для чтения записи TFREADARR, TFWRITEARR.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 16, 2021, 06:21:44 PM
По блок схеме набросок
Code: (clickermann) [Select]
$N = 0
$xm_old = $_xmouse
$ym_old = $_ymouse

SUB(Will)
    LUP($_xmouse, $_ymouse)
    WAITMS(100)
    LDOWN($X[$N], $Y[$N])
    WAITMS(100)
END_SUB

WHILE(1)
    IF(($_xmouse != $xm_old) | ($_ymouse != $ym_old))
        // LOGWRITE("Курсор сместился")
        IF($N != 0)
            Will()
            $xm_old = $_xmouse
            $ym_old = $_ymouse
        END_IF
    END_IF
   
   
    GETKEYSDOWN($keys)
    IF(ARRSIZE($keys) > 0)
        $key_code = $keys[0]
        IF($key_code >= 48) & ($key_code <= 57)
            $key = $key_code - 48
            $N = $key
            print("Нажата кнопка ", $key)
           
            IF($key > 0)
                Will()
            END_IF
           
        END_IF
    END_IF
   
    // С колесом нужно что-то делать
    WAITMS(20)
END_CYC

HALT

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

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

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

Code: (clickermann) [Select]
var1=значение_1,значение_2,значение_3
$str = INIREAD("config.ini", "var1")
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, сколько строк в массиве или можно в одном операторе прочитать весь массив?



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

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

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

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


Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 17, 2021, 04:19:12 AM
Спасибо за код.
Массив это координаты органов управления Давинчи, на которые надо позиционировать курсор.
N - это переменная, условный номер органа управления для удобства она номер элемента в массиве, где хранятся координаты.
Вот картинка - номера не обязательно в таком порядке, просто для ясности.
(https://a.radikal.ru/a11/2109/b7/d6b6fc82d49f.jpg) (https://radikal.ru)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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)
Quote
"Количество функций 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
Произошло движение.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 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)
Quote
"Количество функций 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? но это к другим.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 17, 2021, 10:39:56 AM
сори, не могу понять синтаксис
Не очень понимаю, что значит" никаких массивов там нет"
1. как хранить данные в ini файле
из описания в хэлпе я понял, что одна строка - одно значение, обращаться по номеру строки. А тут вы описываете другую конструкцию. Не могли бы вы прояснить:
как выглядят секции?
Первая строка в в этом примере и есть секция из ini файла и сам файл будет иметь следующее содержание?
var1=значение_1,значение_2,значение_3
var2=значение_1,значение_2,значение_3
.....
varN=значение_1,значение_2,значение_3
Вот так и нет. Одна строка - одно значение. Обращаться не по номеру строки, нет там такого. Обращение идёт по имени секции и имени параметра.

Формат ini
Code: (php) [Select]
[Section1]
par1=значение1
par2=значение2
par3=значение3

[Section2]
par1=значение4
par5=значение5
par6=значение6

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

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

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

Будут ли проигнорированы пробелы и знаки табуляции? (например "12 , 34 , 5 ")
Не будут. Всё перейдёт в значение. Но при извлечении из массива это не помешает их переводу в числа (пробелы точно). В более старых версиях мешало. Поэтому я привык пробелы не оставлять если строка будет биться по разделителю.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 17, 2021, 11:00:51 AM
Code: (clickermann) [Select]
$str = "12,45,56" // без кавычек не работает. Как язык отличает это строковые значения или числовые?
Конечно не работает. Все строки должны быть заключены в кавычки.
Если значение можно перевести в число, то переведёт, если нельзя - останется строкой.

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

Вот тест
Code: (clickermann) [Select]
$str = "12, 45, 56"
strseparate($str, ",", $arr)
print("==", $arr[2], "==")  // == в начале и конце чтобы видны были пробелы
print($arr[2] + 10, "   сложение выполняется")

IF($arr[2] = 56)
    print("равно")
ELSE
    print("НЕ равно")
END_IF

HALT

Вывод:
Quote
11:00:04 == 56==
11:00:04 66   сложение выполняется
11:00:04 равно
Title: Re: автоматизация в Давинчи
Post by: Vint on September 17, 2021, 12:03:36 PM
$str - входная строка / что это за переменная? она появляется только для объявления строки?
$arr - выходной массив / в этом месте происходит объявление массива?
Да.
Да.
$str можно не задавать и писать строку прямо в
Code: (clickermann) [Select]
strseparate("12,45,56" ",", $arr)Но это неудобно если строка длянная или получается откуда-то извне.

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


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

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

Code: (clickermann) [Select]
// одномерный
STRSEPARATE("12,45,56", ",", $one_dimensional_array)

LOGWRITE("Одномерный массив")
LOGWRITE("Размер массива: ", ARRSIZE($one_dimensional_array))
FOR($i=0, $i < ARRSIZE($one_dimensional_array))
    LOGWRITE("[", $i, "] = ", $one_dimensional_array[$i])
END_CYC
LOGWRITE(" ")


// псевдо-двумерный
STRSEPARATE("1,2,3,4", ",", $two_dimensional_array)
STRSEPARATE("10,20,30,40", ",", $two_dimensional_array)
STRSEPARATE("100,200,300,400", ",", $two_dimensional_array)


// выводим все элементы массива  $two_dimensional_array
LOGWRITE("Двумерный массив")
LOGWRITE("Размер массива: ", ARRSIZE($two_dimensional_array))
FOR($i=0, $i < ARRSIZE($two_dimensional_array))
    LOGWRITE("[", $i, "] = ", $two_dimensional_array[$i])
END_CYC
LOGWRITE(" ")

// выводим в двумерном виде  $two_dimensional_array
LOGWRITE("Двумерный вид")
$size = 4
FOR($row=0, $row < ARRSIZE($two_dimensional_array) / $size)
    $line = ""
    FOR($col=0, $col < $size)
        $n = $row * $size + $col
       
        // это для красивого вывода
        FOR($i=0, $i < (3 - $row))
            $line = STRCONCAT($line, " ")
        END_CYC
       
        $line = STRCONCAT($line, $two_dimensional_array[$n])
    END_CYC
    LOGWRITE($line)
END_CYC

HALT

Вывод:
Code: [Select]
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
Title: Re: автоматизация в Давинчи
Post by: Vint on September 17, 2021, 12:06:45 PM
Перенесу посты из темы "IF_PICTURE_IN - Для новичков" сюда. Нечего им там делать
Title: Re: автоматизация в Давинчи
Post by: Vint on September 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)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 18, 2021, 12:05:26 AM
Да, вы правы, сегодня как раз думал о назначении клавиш.
У меня была такая же мысль.
Возможно, я назначу их на дополнительную клавиатуру, где кнопки будут расположены соответствующим образом.

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


Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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:
Code: [Select]
x,90,34,75,109,146,85
y,854,925,927,926,927,960
в начале нулевой элемент удобно обозначает координатную ось а первый элемент соответствует первому элементу управления.
Позже я сделаю в таблице строку с названиями элементов и строку с их номерами, но читать в массив их не буду. Использую только для ясности в таблице.

Code: (clickermann) [Select]
Print("test3----------------")
$filename = "koorda.csv"          //задаем имя файла с координатиами
$string = TFREAD($filename, 1)   //читаем первую строку
Print($string)                    //печатаем прочитаную строку для контроля
strseparate($string, ",", $arr)   //превращаем строку в массив
print ($arr[2]  )                  //печатаем второй элемент

Print("test4----------------")
strseparate(TFREAD("koorda.csv", 1), ",", $x)   //то же самое, но в одну строку
print ("X1=",$x[1] )                             //печатаем первый элемент
halt

Code: [Select]
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 и проверить и отредактировать.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 22, 2021, 09:02:12 AM
Запись в одну строку экономит память за счет того, что не объявляются переменные? Работает ли это быстрее чем длинная запись?
Не имеет значения. На малых данных, как у тебя нет разницы, даже не стоит задумываться об экономии. А вот читаемость снижается. Код пишут 1 раз, а читают много.
Быстрее тоже не будет.

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

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

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

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

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

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

с определением одной клавиши нет вопросов- полно примеров.
Code: (clickermann) [Select]
//нажатие клавиши и устранение дребезга
getkeysdown($kvar)
getkeysdown($kvar1)
WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
getkeysdown($kvar1)
 waitms(15)
END_CYC

SWITCH($kvar)
CASE(#q)
   print("Q")
CASE(#w)
   print("W")
CASE(#e)
   print("E")
CASE(#R)
   print("R")
END_SWITCH
Однако, не могу понять, как определять нажатие сочетания клавиш.
что-то типа ctr+sift+a+b
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 23, 2021, 01:45:42 AM
Написал код. Почти все работает.
проблема в следующем: пока зажата лкм не реагирует на нажатия кнопок.

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



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

LOGCLEAR

$csv = "koorda.csv"          //задаем имя файла с координатами
strseparate(TFREAD($csv, 2), ",", $Names)   //читаем строку  файла в массив $Names
print ("$Names[3]=",$Names[3] )                //печатаем  элемент для проверки
strseparate(TFREAD($csv, 3), ",", $X)   //читаем строку  файла в массив  $X
print ("$X[3]=",$X[3] )                         //печатаем  элемент для проверки
strseparate(TFREAD($csv, 4), ",", $y)   //читаем строку  файла в массив  $y
print ("$y[3]=",$y[3] )                        //печатаем  элемент для проверки
print("массив создан успешно")
print()



WHILE(1)                                    // начало бесконечного цикла
//нажатие клавиши и устранение дребезга
getkeysdown($kvar)      // задаем переменную - какая клавиша нажата
getkeysdown($kvar1)
WHILE($kvar= $kvar1) //если клавиша не отпущена, то подвисаем в цикле и ждем
getkeysdown($kvar1)
 waitms(15)
END_CYC

SWITCH($kvar)     // по условию, какая клавиша нажата - ветвим процесс
CASE(#1)
   print("нажата 1")
      $n=1          // задаем номер для координат из массива
      print("позиция мыши ",$Names[$N])
    Will()
CASE(#2)
   print("нажата 2")
   $n=2
print("позиция мыши ",$Names[$N])
      Will()
CASE(#3)
print("нажата 3")
   $n=3
   print("позиция мыши ",$Names[$N])
    Will()
CASE(#4)
   print("нажата 4")
   $n=4
   print("позиция мыши ",$Names[$N])
      Will()
CASE(#5)
   print("нажата 5")
   $n=5
   print("позиция мыши ",$Names[$N])
      Will()
CASE(#6)
   print("нажата 6")
   $n=6
   print("позиция мыши ",$Names[$N])
      Will()
END_SWITCH
waitms(15)   
END_CYC
haltt

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

содержимое файла koorda.csv

Code: [Select]
0,1,2,3,4,5,6
0,Whill,Y,R,G,B,all
x,90,34,75,109,146,85
y,854,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
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 23, 2021, 02:52:01 AM
Возможно, лучше с крутилками делать пульт.
Однако, энкодеры дороже и в 3 раза больше ног на ардуино надо.
Идеально - начал крутить - мышь сама перепрыгнула, куда надо.
Похуже вариант - энкодеры с кнопкой нажал сверху, покрутил, следующий - нажал покрутил.
При такой стоимости разработки уже можно и трекбол туда засунуть....
Все равно дешевле в 10 раз чем самая дешевая панель от блекмэджик будет.
(https://a.radikal.ru/a06/2109/a7/741e3dc6951b.png) (https://radikal.ru)
Title: Re: автоматизация в Давинчи
Post by: Vint on September 23, 2021, 12:43:00 PM
Написал код. Почти все работает.
Нажимаю "1" (или другую назначенную клавишу) - курсор встает, куда надо и все работает.
Приведённый код не может работать. По крайней мере на моей системе. Кстати, какая у тебя версия кликера?

getkeysdown заполняет массив. Массивы вот так сравнивать нельзя
Code: (clickermann) [Select]
WHILE($kvar = $kvar1)
Если при использовании массива указать просто имя $kvar, то будет использоваться элемент с индексом 0
Т. е $kvar равносильно $kvar[0]

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

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

Можешь посмотреть что попадает в массив, запустив такой код
Code: (clickermann) [Select]
SUB(log_kvar)
    LOGCLEAR
    LOGWRITE("$kvar:")
    FOR($i=0, $i < ARRSIZE($kvar))
        LOGWRITE("    ", $i, " : ", $kvar[$i])
    END_CYC
END_SUB

LOGCLEAR

WHILE(1)
    GETKEYSDOWN($kvar)
    log_kvar()
    WAITMS(50)
END_CYC

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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


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

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


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


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

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


 
 

Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 24, 2021, 04:34:16 AM
эта версия работает
долго подбирал задержки, чтоб четко срабатывали кнопки, но всё равно четкости нет.
пробовал сделать с ISKEYDOWN  вместо GETKEYSDOWN но не получилось.
ISKEYDOWN($arr[$n]) не срабатывает почему-то


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

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

LOGCLEAR

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



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

содержимое файла koorda.csv
Code: [Select]
0,1,2,3,4,5,6
0,Whill,Y,R,G,B,all
x,90,34,75,109,146,85
y,854,944,944,944,944,960
Keya,81,87,69,82,84,89
Keyb,17,17,17,17,17,17
Keyc,0,0,0,0,0,0
,q,w,e,r,t,y
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 24, 2021, 04:42:58 AM
Хочу попробовать  сделать с оператором ISKEYDOWN
не понимаю, почему вот этот код работает
если нажать "q" то печатает "опа"

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


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

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

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

LOGCLEAR

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



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


upd разобрался. в 32-й строке счетчик вылетает за пределы массива.
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 24, 2021, 06:02:34 AM
вот этот код работает сносно.

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

LOGCLEAR

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



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

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

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

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

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

Я где-то прочитал, что скрипт Кликермана может быть скомпилирован. Как это делается?
Нагло врут. Защиты всякие можно сделать от обфускации до выноса кода в dll, но это не компиляция.
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 24, 2021, 06:27:40 PM
Quote
Лучше самому преобразовать для нужного диапазона символов. Вот цифры и буквы:
Код: Clickermann
Code: (clickermann) [Select]
$liters = "0123456789:::::::ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$code = STRPOS($liters, "Z") + 47
print
($code).

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


Quote
А так?

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

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

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

Как лучше организовать ввод координат?
Полагаю, это должен быть отдельный скрипт.
Не понимаю пока, как быть с именами этих координат. Там в интерфейсе кроме тех 4 кругов, на которых я тренировался есть еще и другие панели на этом же месте, они немного отличаются, и есть переключения между ними. чтоб не запутаться надо дать им имена.
И надо, чтоб при выбранных  других панелях не было путаницы и не плодить кучу лишних шоткатов.
(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)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 24, 2021, 11:58:15 PM
Quote
А разве у ардуино есть столько входов? Или там есть приблуды для расширения?
вот она приблуда для расширения. Их можно несколько подключить.
https://www.aliexpress.com/item/32957655097.html (https://www.aliexpress.com/item/32957655097.html)
(http://a.radikal.ru/a06/2109/2c/96bf971bfc58.png)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 12:02:04 AM
Как сделать чтоб имя переменой само было бы переменной?
как исправить строку 20, чтоб она печатала то же, что и 21?

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

$str= "Сумка"

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

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

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

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

halt
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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)

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

LOGCLEAR

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


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

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


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

Code: [Select]
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
0,Lift Whill,Lift Y,Lift R,Lift G,Lift B,Shad Roll,Gamma Whill,Gamma Y,Gamma R,Gamma G,Gamma B,Gamma Roll,Gain Whill,Gain Y,Gain Y,Gain G,Gain B,Gain Roll,Offset Whill,Offset Y,Offset R,Offset G,Offset B,Offset Roll
x1,90,34,75,109,146,85,268,210,252,288,325,271,447,389,431,467,504,442,624,573,573,627,676,624
y1,854,944,944,944,944,960,856,944,944,944,944,960,855,944,944,944,944,960,854,944,944,944,944,961
Keya,81,87,69,82,84,89,81,87,69,82,84,89,81,87,69,82,84,89,81,87,69,82,84,89
Keyb,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Keyc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,Q или 1,w,e,r,t,y,Q или 2,w,e,r,t,y,Q или 3,w,e,r,t,y,Q или 4,w,e,r,t,y
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 10:34:22 AM
можно реализовать эту формулу в табличном процессоре Open Office Calk или Exel. Там есть функция code, которая выдает код символа. Только этот код отличается на 49 от кода клавиш. и цифры сдвинуты. Но может это лучше, чем в исполняемый код вносить?
Если сделать еще одну строку в CSV с полным перечнем всех символов, в позициях, соответствующим номерам, то не будет ли это излишним расходом памяти?
Или после получения всех нужных кодов обнулить(очистить) массив? Как это сделать?
Это не ардуино и не микропроцессоры, здесь не нужно экономить каждый байт. В данном случае преждевременная и совершенно не нужная оптимизация. Получается экономия на спичках.

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

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

С именами я не понял. В чём проблема задать нужные имена. Хранил бы в ini и проблем бы небыло ни с секциями ни с именами. В csv тоже не проблема вроде.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 10:48:11 AM
Как сделать чтоб имя переменой само было бы переменной?
как исправить строку 20, чтоб она печатала то же, что и 21?

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

$str= "Сумка"

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

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

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

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

halt
http://crapware.aidf.org/forum/index.php?topic=5612.msg36775#msg36775
Title: Re: автоматизация в Давинчи
Post by: Vint on September 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. Коды клавиш
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 11:10:14 AM
Почему перешёл на ISKEYDOWN?
ISKEYDOWN хорошо, когда клавиш мало. Их уже 24 шт. Сейчас цикл сканирования 24 * 10 + ещё чуть ≈ 250 ms
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 01:27:41 PM
Почему перешёл на ISKEYDOWN?
ISKEYDOWN хорошо, когда клавиш мало. Их уже 24 шт. Сейчас цикл сканирования 24 * 10 + ещё чуть ≈ 250 ms
цикл сканирования 6 позиций. там есть сдвиг.
Но задержка возникает только если кнопка зажата. Если не зажата, то даже на 24 кнопки будет один раз 10мс.

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

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

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

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

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

Code: (clickermann) [Select]
LOGCLEAR

$csv = "koorda.csv"

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


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

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


   END_CYC
END_CYC

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

$scva= "ko.csv"

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

halt

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

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

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

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

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

Quote
С именами я не понял. В чём проблема задать нужные имена. Хранил бы в ini и проблем бы не было ни с секциями ни с именами. В csv тоже не проблема вроде.
В ini файле не наглядно хранить координаты, они же парами, и к ним еще клавиша, которая их вызывает. И создавать этот ini хлопотно в моем случае. Сложно проконтролировать правильность.
В CSV , когда открываешь  в табличном редакторе - все видно наглядно- строки, столбцы.
(http://a.radikal.ru/a43/2109/5b/f34db0699150.png)
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 02:25:40 PM
цикл сканирования 6 позиций. там есть сдвиг.
Но задержка возникает только если кнопка зажата. Если не зажата, то даже на 24 кнопки будет один раз 10мс.
Да, сдвиг же, 10 кнопок сканирует. Но 10 мс там прописано всегда 6*10 ++
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 02:30:54 PM
Code: [Select]
Да, сдвиг же, 10 кнопок сканирует. Но 10 мс там прописано всегда 6*10 ++но задержка только если кнопка нажата, а иначе на оба цикла только одна задержка 10 мс
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 02:48:15 PM
Нет. В том коде, что выложен на 6 кнопок всегда. Строка 51
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 02:54:24 PM
правильно 1 раз 10мс на 2 цикла сначала4, а потом 6 кнопок.
И если туда добавить еще кнопок, то все равно будет только одна задержка.
что я не верно понимаю?
Title: Re: автоматизация в Давинчи
Post by: Vint on September 28, 2021, 03:33:13 PM
Если поменять местами 51 и 52 строки, то будет так, как ты говоришь. Сейчас 10 мс на каждую из 6 проверок.
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 10:53:18 PM
О! спасибо! А я прозевал.
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 28, 2021, 11:59:29 PM
У профессиональных пультов для цветокора есть возможность крутить сразу 2 колеса, и они одновременно работают.
можно ли как-то кликерману прикрутить возможность управлять с 2-мя мышами с независимыми курсорами?
Хотя, зачем 2 мыши... Надо по очереди скакать туда - сюда. Если это делать достаточно часто, то есть шанс, что будет не заметно.
Title: Re: автоматизация в Давинчи
Post by: Vint on September 29, 2021, 09:30:57 AM
Проф пульты взаимодействуют с API программы и посылают в неё команды напрямую.
В системе курсор всего один, неоткуда взяться второму, это просто не предусмотрено в ОС.

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

Title: Re: автоматизация в Давинчи
Post by: Vint on September 29, 2021, 02:07:03 PM
Могу сделать на AutoIt и кидать сообщения кликеру при событиях. Так же, наверно нужно сделать включение/отключение слежения. А может и не надо.
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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 :)


Quote
В системе курсор всего один, неоткуда взяться второму, это просто не предусмотрено в ОС.
Есть всякие такие http://adminxp.ru/dva-kursora/ (http://adminxp.ru/dva-kursora/) методы сделать 2 курсора, но они не стабильны.
В 10й винде есть мультитач, значит есть возможность реагировать на несколько координат касания.
https://youtu.be/NnSJRRn8rQA (https://youtu.be/NnSJRRn8rQA)
Title: Re: автоматизация в Давинчи
Post by: Ivankak on September 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)
А будет нормально работать, шустро?
Title: Re: автоматизация в Давинчи
Post by: Vint on September 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 для этого.
Title: Re: автоматизация в Давинчи
Post by: Vint on October 05, 2021, 06:41:07 PM
Если можно иметь такую возможность, то лучше ее иметь.

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

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