Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (18): « 1 2 3 4 [5] 6 7 8 9 » В конец    

> Без описания
Kibor
Отправлено: 12 Апреля, 2021 - 10:11:47
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




ivantu , А если на нее нажать?
 
 Top
ivantu
Отправлено: 12 Апреля, 2021 - 10:19:44
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013  
Репутация: 14




 Kibor пишет:
ivantu , А если на нее нажать?

Это сарказм?

Если на нее нажать то НИЧЕГО.
 
 Top
Zireael
Отправлено: 12 Апреля, 2021 - 10:38:36
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Если на нее нажать то НИЧЕГО.

Скорее всего скачивается старая версия. Удалить кеш загрузок браузера или скачать архив с другого браузера.
 
 Top
ivantu
Отправлено: 12 Апреля, 2021 - 10:41:13
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013  
Репутация: 14




 Zireael пишет:
Скорее всего скачивается старая версия. Удалить кеш загрузок браузера или скачать архив с другого браузера.


Помогло, спасибо.
 
 Top
Kibor
Отправлено: 12 Апреля, 2021 - 16:48:24
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




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

Реализовал импорт готовых шаблонов в редактор, создание блоков в соответствие с этими шаблонами и при клике на блок правой кнопкой мыши появление меню, в котором можно выбрать Свойства и появится диалоговое окно настроек этого типа блока.

Рядом с редактором находится папка templates. В ней находятся шаблоны.
В данном случае там два демонстративных шаблона. KEY и MOUSE..

Можно добавлять свои. Сколько добавите, столько появится кнопок.. Если в папку templates переместить шаблон Блок, который в папке с программой - появится третья кнопка.

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

Выбрав справа нужную кнопку шаблона можно ставить блок. На блоке будет название шаблона.
При клике правой кнопкой мыши на блоке можно вызвать его свойства, которые соответствуют его типу.

При нажатие ТЕСТ открывается шаблон рядом с редактором Блок

Пример шаблонов

Key
CODE:
[INTERFACE]
DIALOG, "Клавиатура", 230, 160;
BUTTON_OK, "Принять", 20, 110, 100, 25;
BUTTON_CANCEL, "Закрыть", 123, 110, 100, 25;
STATIC, "Пауза До", 10, 10, 90, 18;
EDIT, 105, 8, 115, 18, int Edit_P1;
STATIC, "Символ", 10, 30, 90, 18;
EDIT, 105, 28, 115, 18, int Edit_S;
COMBO, "Нажать - Отпустить" "Нажать" "Отпустить", 10, 50, 212, 200, int Combo;
STATIC, "Пауза После", 10, 78, 90, 18;
EDIT, 105, 76, 115, 18, int Edit_P2;
[END]


[FUNCTION_BODY]
function Key_(int Edit_P1, int Edit_S, int Combo, int Edit_P2)
{
pause(Edit_P1);
if (Combo==0)key(Edit_S);
if (Combo==1)keydown(Edit_S);
if (Combo==2)keyup(Edit_S);
pause(Edit_P2);
}
[END]

[FUNCTION_CALL]
Key_(100, 65, 0, 500);
[END]

[FUNCTION_RETURN]
OFF;
[END]


mouse
CODE:
[INTERFACE]
DIALOG, "Мышь", 230, 150;
BUTTON_OK, "Принять", 20, 100, 100, 25;
BUTTON_CANCEL, "Закрыть", 123, 100, 100, 25;
STATIC, "Пауза До", 10, 10, 90, 18;
EDIT, 105, 8, 115, 18, int Edit_P1;
COMBO, "Левая Нажать - Отпустить" "Левая Нажать" "Левая Отпустить"
"Правая Нажать - Отпустить" "Правая Нажать" "Правая Отпустить"
"Средняя Нажать - Отпустить" "Средняя Нажать" "Средняя Отпустить"
"Переместить", 10, 30, 212, 200, int Combo;
EDIT, 10, 55, 100, 18, int X;
EDIT, 120, 55, 100, 18, int Y;
STATIC, "Пауза После", 10, 78, 90, 18;
EDIT, 105, 76, 115, 18, int Edit_P2;
[END]


[FUNCTION_BODY]
function Mouse_(int Edit_P1, int Combo, int X, int Y, int Edit_P2)
{
pause(Edit_P1);
if (Combo==0)mouse(LEFT, X, Y);
if (Combo==1)mousedown(LEFT, X, Y);
if (Combo==2)mouseup(LEFT, X, Y);
if (Combo==3)mouse(RIGHT, X, Y);
if (Combo==4)mousedown(RIGHT, X, Y);
if (Combo==5)mouseup(RIGHT, X, Y);
if (Combo==6)mouse(MIDDLE, X, Y);
if (Combo==7)mousedown(MIDDLE, X, Y);
if (Combo==8)mouseup(MIDDLE, X, Y);
if (Combo==9)mousemove(X, Y);
pause(Edit_P2);
}
[END]

[FUNCTION_CALL]
Mouse_(100, 0, 0, 0, 500);
[END]

[FUNCTION_RETURN]
OFF;
[END]


 
 Top
Kibor
Отправлено: 13 Апреля, 2021 - 09:51:34
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Обновил архив.
Сделал более расширенное окно при выборе файла.
Изменил отображение текста в EDIT_MULTILINE
Она принимает только тип string, но в этом блоке не показаны двойные кавычки.
В EDIT если введен текст надо указывать двойные кавычки. Иначе это может быть переменная.
 
 Top
Kibor
Отправлено: 13 Апреля, 2021 - 17:33:23
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Обновил архив.

Сделал сохранение параметров блоков.
Можно одновременно открывать много окон настроек разных блоков.

Изменил блок [FUNCTION_RETURN] на [FUNCTION_LOGIC]

Если функция сравнивается с чем то и от нее можно вести две линии (зеленая и красная), то этот блок надо указывать.
Если от функции идет только зеленая линия - не указывать.

Формат [FUNCTION_LOGIC]

Сравнение или больше 0
Будет так: if (fun(5)>0)
CODE:
[FUNCTION_LOGIC]
>0
[END]


Сравнение со строкой
Будет так: if (fun(5)=="wwwwww ee")
CODE:
[FUNCTION_LOGIC]
=="wwwwww ee"
[END]


Без условия.
Будет так: if (fun(5))
CODE:
[FUNCTION_LOGIC]
[END]


Если данного блока нет, то будет так
fun(5);

В зависимости от присутствия данного блока от функции можно вести только зеленую линию или зеленую и красную.
В данном тесте от блоков mouse и key можно только зеленую вести, а от блока Блок - зеленую и красную.
(Добавление)
Улучшил юзабилити диалоговых окон.
Они появляются в месте блока. Не вызываются повторно, а активируются. Активируются все окна открытые при работе с каким то диалогом, если они были под низом.
 
 Top
Kibor
Отправлено: 18 Апреля, 2021 - 21:36:07
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Реализовал генератор переменных.

К примеру есть такой скрипт:

Код (Отобразить)


Тут у нас 4 блока поиска изображения, но ищется всего 2 изображения.
Поэтому мы должны выделить память под два массива и загрузить эти изображения по одному разу в память.

Как это реализовать в подключаемом файле при создание блока:
Какое изображение мы будем искать зависит от пути к файлу (в данном случае).

Код созданного блока:
CODE:
[ESCAPE_CHAR]
^
[END]

[INTERFACE]
DIALOG, "Поиск изображения", 441, 132;
BUTTON_OK, "Принять", 230, 80, 100, 25;
BUTTON_CANCEL, "Закрыть", 333, 80, 100, 25;
STATIC, "Путь к файлу", 10, 10, 90, 18;
EDIT, 105, 8, 220, 18, string Path;
BUTTON_FILE, "Выбрать файл", 330, 8, 100, 18, Path;
STATIC, "Сколько искать", 10, 30, 90, 18;
EDIT, 105, 28, 220, 18, int Kol;
EDIT, 235, 50, 50, 18, int K;
EDIT, 300, 50, 50, 18, int X;
EDIT, 355, 50, 50, 18, int Y;
COMBO, "Мышь клик" "Мышь нажать" "Мышь отпустить", 10, 50, 212, 200, int M;
[END]

[ASSOC_NUMBER]
Path
[END]

[ASSOC_VAR]
Path="C:\Image_0.bmp";
Kol = Kol_Kib;
X = #X_Kib;
Y = #Y_kib;
K = #K_kib;
M = 0;
Image = #Image~*~;
[END]

[GLOBAL_VAR]
int Kol_Kib, K_kib;
int X_Kib[1000], Y_kib[1000];
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];
[END]


[GLOBAL_SINGLE_CODE]
external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");
[END]

[GLOBAL_REPEAT_CODE]
loadimage (#Image~*~[0][0], ~Path~);
[END]

[FUNCTION_BODY]
function (int #image, int kol, int #mK, int #mX, int #mY, int Mouse)
{
mK=findimage(kol, #image[0][0], -1, #mX[0], #mY[0], 0, 0, 1024, 768, -1);
if (mK<0)MessageBoxA(0, "Ошибка", "Окно", 0);
if (Mouse==0)mouse(LEFT, mX[0], mY[0]);
if (Mouse==1)mousedown(LEFT, mX[0], mY[0]);
if (Mouse==2)mouseup(LEFT, mX[0], mY[0]);
return mK;
}
[END]

[FUNCTION_CALL]
(Image[0][0], Kol, K, X[0], Y[0], M)
[END]


[FUNCTION_LOGIC]
>0
[END]



Блок [ASSOC_NUMBER] отвечает за переменную указанную в [INTERFACE], которая ассоциируется с номером объявленных вспомогательных переменных.
В [INTERFACE] к EDIT в котором находится путь к файлу привязана переменная string Path.
Переменные в [INTERFACE] не входят в генерируемый код. Они предназначены для взаимодействия диалогового окна настроек с Редактором для создания кода.

В блоке [ASSOC_NUMBER] указываем
CODE:
[ASSOC_NUMBER]
Path
[END]


Это означает что вспомогательные переменные (в данном случае переменная int Image*[?][?], которую надо объявить и в которую будет загружено изображение) будет пронумерована в соответствие в тем что находится в Path.
Если в Path в различных блоках находится один и тот же путь к файлу, то int Image*[?][?] будет объявлена один раз и один раз будет вызвана для нее loadimage.

Блок [GLOBAL_VAR] отвечает за объявление глобальных переменных, необходимых для работы блока.

CODE:
[GLOBAL_VAR]
int Kol_Kib, K_kib;
int X_Kib[1000], Y_kib[1000];
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];
[END]


Пояснение:

~*~ - в это место вставляется номер, который зависит от переменной в [ASSOC_NUMBER]
Сколько в коде содержится блоков с разными Path, столько различных номеров будет у ~*~ и эти переменные будут уникальные.
Одноименные переменные объявляются по одному разу.

~Path~ - в это место вставится то, что содержится в переменной Path после нажатия кнопки Принять.
В данном случае там будет путь к файлу.

~GET(imagewidth("C:\A.bmp"))~ - Функция GET возвращает информацию, запрос о которой находится в его параметре.
В данном случае она вернет ширину изображения C:\A.bmp

Пример:

CODE:
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];


Все ~*~ заменятся на номер, который зависит от переменной в блоке [ASSOC_NUMBER]. В данном случае Path. Пути к файлу.
Каждый уникальный путь получит свой номер. Одинаковые будут иметь одинаковые номера и переменная дублироваться не будет.
CODE:
int Image0[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];


Затем все ~Path~ (Path это переменная, значение которой подставится) заменится на "C:\A.bmp", или что будет в EDIT после нажатия кнопки Принять.
CODE:
int Image0[~GET(imagewidth("C:\A.bmp"))~][~GET(imageheight("C:\A.bmp"))~];


Затем все ~GET(....)~ заменятся на возвращаемые ей значения. В данном случае ширину и высоту C:\A.bmp

В итоге будет сгенерированя переменная

CODE:
int Image0[25][12];

25 и 12, это ширина и высота изображения, которое будем загружать в массив.



Блок [ASSOC_VAR] отвечает за ассоциацию названий переменных с переменным в [INTERFACE] и [FUNCTION_CALL]

Пример:

CODE:
[INTERFACE]
...........................
EDIT, 235, 50, 50, 18, int K;
...........................
[END]


CODE:
[ASSOC_VAR]
..............................
K = #K_kib;
.................................
[END]


CODE:
[FUNCTION_CALL]
(Image[0][0], Kol, K, X[0], Y[0], M)
[END]


Означает то, что то что записано в EDIT будет вставлено в вызов функции на место переменной K
По умолчанию в [ASSOC_VAR] указано #K_kib. Если мы в EDIT изменим это, при вызове функции на место K будет вставлен другой текст (имя переменной)

.......................................................................................................

В [INTERFACE] добалено создание еще EDIT
EDIT_WRITE_RETURN
При создание этого поля становится возможно генерировать вызов функции такого плана:
CODE:
Rez = fun ();

Где Rez, это имя переменной, которое введено в это поле.
Если это поле оставить пустым, будет такой вызов:
CODE:
fun ();


.......................................................................................................

Код блока FindImage (Отобразить)



Код блока OpenProcess (Отобразить)


.......................................................................................................

Посмотреть как это работает можно скачав архив.
В нем есть два блока в папке templates

После создания блоков надо открыть их свойства и нажать Принять (после изменения или не изменения данных в диалогах настроек).
Затем нажать кнопку Получить код. Выйдет диалог в объявленными переменными и вызовами функций.
(Добавление)
Обновил.
Баг устранил.
(Добавление)
Выложил правильный файл блока OpenProcess

Старый. В котором не возможно было в разных блоках указать разные указатели на окна, так как переменная не копировалась в зависимости от разных указателей.
CODE:
[ESCAPE_CHAR]
^
[END]

[INTERFACE]
DIALOG, "Открыть процесс", 370, 102;
BUTTON_OK, "Принять", 159, 50, 100, 25;
BUTTON_CANCEL, "Закрыть", 262, 50, 100, 25;
STATIC, "Указатель на окно", 10, 10, 120, 18;
EDIT, 135, 8, 220, 18, win Win;
STATIC, "Переменная", 10, 30, 90, 18;
EDIT_WRITE_RETURN, 100, 30, 70, 18, int Return;
[END]

[ASSOC_VAR]
Win = window ("Калькулятор", "CalcFrame", -1);
Return = Proc;
[END]

[GLOBAL_VAR]
win W = ~Win~;
int Proc;
[END]

[FUNCTION_BODY]
function ()
{
return openprocess(W);
}
[END]

[FUNCTION_CALL]
()
[END]





Новый. Где все работает корректно. Переменные на указатели копируются столько, сколько разных указателей.
CODE:
[ESCAPE_CHAR]
^
[END]

[INTERFACE]
DIALOG, "Открыть процесс", 370, 102;
BUTTON_OK, "Принять", 159, 50, 100, 25;
BUTTON_CANCEL, "Закрыть", 262, 50, 100, 25;
STATIC, "Указатель на окно", 10, 10, 120, 18;
EDIT, 135, 8, 220, 18, win Win;
STATIC, "Переменная", 10, 30, 90, 18;
EDIT_WRITE_RETURN, 100, 30, 70, 18, int Return;
[END]

[ASSOC_NUMBER]
Win
[END]

[ASSOC_VAR]
Win = window ("Калькулятор", "CalcFrame", -1);
Return = Proc;
[END]

[GLOBAL_VAR]
win W~*~ = ~Win~;
int Proc;
[END]

[FUNCTION_BODY]
function ()
{
return openprocess(W~*~);
}
[END]

[FUNCTION_CALL]
()
[END]



 
 Top
Kibor
Отправлено: 19 Апреля, 2021 - 10:42:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Обновил архив.
Реализовал генератор блока кода, который необходимо выполнить в начале скрипта для работы функции.
Блок [GLOBAL_REPEAT_CODE]

CODE:
[GLOBAL_REPEAT_CODE]
loadimage(#Image~*~[0][0], ~Path~);
[END]


В нем содержится код, который может повторяться для каждого уникального блока, в котором уникальная переменная в блоке [ASSOC_NUMBER]

CODE:
[ASSOC_NUMBER]
Path
[END]

В блоке [ASSOC_NUMBER] можно указывать несколько переменных, уникальность хоть одной из них изменит счетчик ~*~
CODE:
[ASSOC_NUMBER]
Path, K
[END]


Для функции findimage, этот код должен содержать загрузку изображения loadimage при запуске скрипта.
И в тоже время не повторяться, если ищется одно и то же изображение.

 
 Top
Kibor
Отправлено: 20 Апреля, 2021 - 15:59:16
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Обновил архив.

Добавил новый визуальный редактор диалогов (блока [INTERFACE])
Вызывается кнопкой Редактор [INTERFACE]
Принцип такой же как в редакторе диалогов в Кибор, но на порядок удобнее.
Показывает границы объектов, статиков в том числе.
Имеет перемещение по ячейкам и линии выравнивания. Что удобно для быстрого и ровного расположения элементов.

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



PS там мерцание при переносе и изменение размера. Забыл поправить. Исправлю позже.
 
 Top
Страниц (18): « 1 2 3 4 [5] 6 7 8 9 » В конец
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« Тестирование Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by