Полный список функций Кибор с ссылками и описанием находится по этой ссылке:
Полный список функций Кибор с ссылками и описанием
Переменные.
Для тех кто знаком с Си не будет ничего нового. Единственное отличие - работа с указателями, но об этом попозже.
Для начала разберемся синтаксисом. Особо тут объяснять нечего, поэтому разбираться будем по ходу.
Что нам сейчас надо знать, так это то что знак « ; » означает новую строку, « , » является разделителем имен однотипных переменных при объявление их в одну строку, « " » является признаком начала и конца текстовой строки, « \' » заключают в себе один знак.
« // » строка идущая после двойного слеша комментарий и не выполняется.
« /* »текст между данными символами также не выполняется« */ »
Типы переменных:
Переменные бывают 5 типов:
int - целое число.
double - дробное число.
string - текстовая строка.
char - имеет 1 байт и может содержать в себе 1 символ.
win - содержит указатель на окно либо контрол для их индифкации. Переменную win нельзя объявлять локально (в теле функции). Она должна объявляться глобально. Вверху основного скрипта. При объявление win автоматически создается структура из 9 переменных
.width - int
.height - int
.left - int
.top - int
.widthclient - int
.heightclient - int
.leftclient - int
.topclient - int
.name - string
.class - string
содержащая в себе данные о окне либо контроле на которые указывает win. Пример: win wind; создает структуру:
wind.width
wind.height
wind.left
wind.top
wind.widthclient
wind.heightclient
wind.leftclient
wind.topclient
wind.name
wind.class
Переменную win нельзя объявлять локально (в теле функции). Она должна объявляться глобально. Вверху основного скрипта.
Объявление переменных:
Пример объявления переменной int:
int per;
int dot;
Так же их можно объявить одной строкой через « , »:
int per, dot;
При объявление можно сразу задать значение:
int per=5;
int dot=6;
Или:
int per=5, dot=6;
Для других переменных синтаксис такой же. Объявляем string:
string str="текст", str1="текст1";
Можно и так:
int per=5; string str="текст"; string str1="текст1"; win wind; char ch='a';
Только в этом случае ставим разделитель строк « ; »
Для win можно так же применять знак равенства при присвоение ей указателя через функцию window и подобные и прямое присвоение HWND в виде числа.
win w = window ("Калькулятор", "CalcFrame", -1);
win w = 32575;
Масивы:
В скриптах можно использовать масивы переменных. Объявляются они так:
int per[99999], per1[50][100];
string str[5];
win wind[15];
При объявление масива win создается масив структуры на который указывает win:
win wind[15];
wind.width[15];
wind.height[15];
......
Обращаться к нему надо так:
int wid_okno = wind.width[5];
wind.name[5]="Новое имя окна";
Можно использовать от одно до пятимерных масивов включительно.
1. Kibor - 27 Марта, 2020 - 06:31:48 - перейти к сообщению
2. Kibor - 27 Марта, 2020 - 06:32:33 - перейти к сообщению
Математические и строковые операции.
С перменными типа int и double допускаются все математические операции:
int a=5+7, b[10][36][70], c;
double g;
c=8;
b[a-2][c+a*2][55]=a*c-a+5*(-5-9);
g=a/c;//в g попадет целое число, так как a и c типа int
Так же можно прибавлять и отнимать по единице:
c++;
a--;
С перменными типа string и char допускаются строковые операции сложения:
string str = "бла";
str = str+"дописывается к str";
char ch='!';
string str = str+ch;
В Кибор char в отличие от Си не может учавствовать в арефметических операциях с int. Единственная операция доступная char:
char ch='a';
ch++;
ch--;
win не учавствует ни в каких арефметических операциях;
С перменными типа int и double допускаются все математические операции:
int a=5+7, b[10][36][70], c;
double g;
c=8;
b[a-2][c+a*2][55]=a*c-a+5*(-5-9);
g=a/c;//в g попадет целое число, так как a и c типа int
Так же можно прибавлять и отнимать по единице:
c++;
a--;
С перменными типа string и char допускаются строковые операции сложения:
string str = "бла";
str = str+"дописывается к str";
char ch='!';
string str = str+ch;
В Кибор char в отличие от Си не может учавствовать в арефметических операциях с int. Единственная операция доступная char:
char ch='a';
ch++;
ch--;
win не учавствует ни в каких арефметических операциях;
3. Kibor - 27 Марта, 2020 - 06:33:41 - перейти к сообщению
Логические операции и переходы.
Все логические решения принимаются посредством двух операторов if и else
if позволяет сравнить между собой данные и в случае истины выполнить идущий в теле if код.
Для сравнения используются:
== равно
< меньше
> больше
< = меньше или равно
>= больше или равно
!= не равно
При наличие else, в теле else выполняется код при лжи в сравнение if
Пример:
if (5==6)
{
//если 5==6 выполнить код идущий между фигурными скобками
}
else
{
//если 5!=6 выполнить код идущий между фигурными скобками
}
Синтаксис:
Синтаксис как и в Си. Вышеописанный код можно представить и так:
if (5==6)//если 5==6 выполнить код этот
else//если 5!=6 выполнить код этот
либо так
if (5==6){a=b+7; c=8;}
else{c=5; messagebox("пять не равно шести");}
Можно использовать любую глубину операторов if else:
if (5==6)
{
if (75<126+c*5)//выполнить код этот
else
{
//выполнить код этот
}
}
else
{
if (str!="бла")//выполнить код этот
}
if (5==6)
{
if (75<126+c*5)//выполнить код этот
else
{
//выполнить код этот
}
}
else
{
if (str!="бла")//выполнить код этот
}
Без указания операторов сравнения
int a=1;
if(a)
{
messagebox("");
}
Будет равносильно сравнению с 0
int a=1;
if(a!=0)
{
messagebox("");
}
Можно сравнивать несколько условий сразу разделив их && (и) || (или):
if (5==6 && str=="бла"+str1 && (c-6>8 || ch=='a'))//выполнить код этот
Обратите внимание на скобки. Со скобками в данном случае надо чтобы
5==6 и str=="бла"+str1 и хоть одно из c-6>8 или ch=='a' была истина для выполнения условия..
Без скобок или 5==6 и str=="бла"+str1 и c-6>8 или одно ch=='a' была истина для выполнения условия..
Сравнивать можно между собой:
int - int, int - double, double - double, string - string, string - char, char - char
В виде параметров для сравнения можно использовать возвращаемые значения функций. В этом случае вы должны знать какой тип переменной она возвращает. Пример:
int color=178898;
if (color==getcolor(10, 20))messagebox("совпадение цвета 178898 с цветом в экранных координатах 10, 20");
win можно сравнивать только с 0 для проверки есть или нету окна или контрола на который указывает win.
Переходы:
О переходах пару строк, поэтому не буду создавать новую статью и опишу их тут.
Команда для перехода одна: goto
Синтаксис:
Команда goto может использоваться только если метка и команда находятся в главном коде, или оба находятся в функции.
Также допускается выход по goto с таймера в основной код.
Для выхода по goto с функции в главный код необходимо добавить перед goto:
goto global подробнее
Все логические решения принимаются посредством двух операторов if и else
if позволяет сравнить между собой данные и в случае истины выполнить идущий в теле if код.
Для сравнения используются:
== равно
< меньше
> больше
< = меньше или равно
>= больше или равно
!= не равно
При наличие else, в теле else выполняется код при лжи в сравнение if
Пример:
if (5==6)
{
//если 5==6 выполнить код идущий между фигурными скобками
}
else
{
//если 5!=6 выполнить код идущий между фигурными скобками
}
Синтаксис:
Синтаксис как и в Си. Вышеописанный код можно представить и так:
if (5==6)//если 5==6 выполнить код этот
else//если 5!=6 выполнить код этот
либо так
if (5==6){a=b+7; c=8;}
else{c=5; messagebox("пять не равно шести");}
Можно использовать любую глубину операторов if else:
if (5==6)
{
if (75<126+c*5)//выполнить код этот
else
{
//выполнить код этот
}
}
else
{
if (str!="бла")//выполнить код этот
}
if (5==6)
{
if (75<126+c*5)//выполнить код этот
else
{
//выполнить код этот
}
}
else
{
if (str!="бла")//выполнить код этот
}
Без указания операторов сравнения
int a=1;
if(a)
{
messagebox("");
}
Будет равносильно сравнению с 0
int a=1;
if(a!=0)
{
messagebox("");
}
Можно сравнивать несколько условий сразу разделив их && (и) || (или):
if (5==6 && str=="бла"+str1 && (c-6>8 || ch=='a'))//выполнить код этот
Обратите внимание на скобки. Со скобками в данном случае надо чтобы
5==6 и str=="бла"+str1 и хоть одно из c-6>8 или ch=='a' была истина для выполнения условия..
Без скобок или 5==6 и str=="бла"+str1 и c-6>8 или одно ch=='a' была истина для выполнения условия..
Сравнивать можно между собой:
int - int, int - double, double - double, string - string, string - char, char - char
В виде параметров для сравнения можно использовать возвращаемые значения функций. В этом случае вы должны знать какой тип переменной она возвращает. Пример:
int color=178898;
if (color==getcolor(10, 20))messagebox("совпадение цвета 178898 с цветом в экранных координатах 10, 20");
win можно сравнивать только с 0 для проверки есть или нету окна или контрола на который указывает win.
Переходы:
О переходах пару строк, поэтому не буду создавать новую статью и опишу их тут.
Команда для перехода одна: goto
Синтаксис:
CODE:
goto a;//идти к метке a
messagebox("эту строчку пропустили и она не выполнится");
a: messagebox("попали на эту строку");// вот метка a
messagebox("эту строчку пропустили и она не выполнится");
a: messagebox("попали на эту строку");// вот метка a
Команда goto может использоваться только если метка и команда находятся в главном коде, или оба находятся в функции.
Также допускается выход по goto с таймера в основной код.
Для выхода по goto с функции в главный код необходимо добавить перед goto:
goto global подробнее
4. Kibor - 27 Марта, 2020 - 06:34:56 - перейти к сообщению
Указатели.
Указатель на переменную ссылается на один и тот же адрес в памяти что и переменная, то есть работая с указателем на переменную мы по сути работаем с самой переменной.
С указателями в Кибор дела обстоят совсем не так как в Си.
Указатели могут объявляться только в функции при объявление примаемых параметров и использоваться только в теле этой функции.
Синтаксис так же другой. Приведу пример передачи указателя при вызове функции, если что не понятно ознакомьтесь со статьей функции.
К примеру есть код:
int a =5;
plus(#a);//передаем функции указатель на переменную a ставя перед ней « # »
messagebox (a);//a=6
//////////////////////////////////////////////////
function plus(int #c)//напишем функцию принимающую в параметрах указатель
{
c++;// с является указателем на a. данный код равносилен a++;
}
Пример с масивами:
int a[10][50] ;
plus(#a[0][0]);//передаем функции указатель на переменную a ставя перед ней « # »
messagebox (a[5][25]);//a[5][25]=5
//////////////////////////////////////////////////
function plus(int #c)//напишем функцию принимающую в параметрах указатель
{
c[5][25]=5;// с является указателем на a. данный код равносилен a[5][25]=5;
}
Если вы не совсем поняли значимость указателей вернитесь к этой статье после ознакомлением с функциями.
Указатель на переменную ссылается на один и тот же адрес в памяти что и переменная, то есть работая с указателем на переменную мы по сути работаем с самой переменной.
С указателями в Кибор дела обстоят совсем не так как в Си.
Указатели могут объявляться только в функции при объявление примаемых параметров и использоваться только в теле этой функции.
Синтаксис так же другой. Приведу пример передачи указателя при вызове функции, если что не понятно ознакомьтесь со статьей функции.
К примеру есть код:
int a =5;
plus(#a);//передаем функции указатель на переменную a ставя перед ней « # »
messagebox (a);//a=6
//////////////////////////////////////////////////
function plus(int #c)//напишем функцию принимающую в параметрах указатель
{
c++;// с является указателем на a. данный код равносилен a++;
}
Пример с масивами:
int a[10][50] ;
plus(#a[0][0]);//передаем функции указатель на переменную a ставя перед ней « # »
messagebox (a[5][25]);//a[5][25]=5
//////////////////////////////////////////////////
function plus(int #c)//напишем функцию принимающую в параметрах указатель
{
c[5][25]=5;// с является указателем на a. данный код равносилен a[5][25]=5;
}
Если вы не совсем поняли значимость указателей вернитесь к этой статье после ознакомлением с функциями.
5. Kibor - 27 Марта, 2020 - 06:35:34 - перейти к сообщению
Функции.
Функция, это подпрограмма, принимающая или не принимающая параметры, вызываемая сколько угодно раз и с какого угодно участка кода, выполняющая свой участок кода и по завершению возвращающая или не возвращающая результат и управление вызвавшей ее строке.
Использование функций существенно сокращает размер программного кода повышая его читабельность и позволяет реализовывать сложные алгоритмы не боясь запутаться в нагромождение строк.
Синтаксис:
Каждая новая функция должна иметь свое уникальное имя.
Оператор return служит для выхода из функции и возврата в следующую строку от ее вызвавшей. Если return отсутствует функция выполняется до закрывающей фигурной скобки и управление возвращается в следующую строку от ее вызвавшей.
Если после оператора return находится возвращаемое значение, функция завершается и возвращается управление в строку ее вызвавшеую и она заново выполняется, только вместо вызова функции находится возвращаемое ей выражение стоящее после return.
Пример создания простейшей функции:
К примеру есть код:
Объявленные в параметрах и теле функций переменные видны только в этой функции и могут иметь одинаковые имена в разных функциях.
Это же относится и к команде перехода goto и их меткам.
Приведенный выше пример работает в такой простой ситуации. Но что делать если нам надо в функции произвести такую же операцию с масивами? Можно конечно сделать так:
Но гораздо лучше не вызывать функцию 100 раз, а передать ей указатель на масив и за раз все сделать (Про указатели можно почитать в статье Указатели):
В вышеприведенных примерах можно было вообще не передавать в параметрах переменные b и c, так как они объявлены в основном теле программы и видны в любом месте кода и в функции можно было их использовать напрямую.
Функция, это подпрограмма, принимающая или не принимающая параметры, вызываемая сколько угодно раз и с какого угодно участка кода, выполняющая свой участок кода и по завершению возвращающая или не возвращающая результат и управление вызвавшей ее строке.
Использование функций существенно сокращает размер программного кода повышая его читабельность и позволяет реализовывать сложные алгоритмы не боясь запутаться в нагромождение строк.
Синтаксис:
Каждая новая функция должна иметь свое уникальное имя.
Оператор return служит для выхода из функции и возврата в следующую строку от ее вызвавшей. Если return отсутствует функция выполняется до закрывающей фигурной скобки и управление возвращается в следующую строку от ее вызвавшей.
Если после оператора return находится возвращаемое значение, функция завершается и возвращается управление в строку ее вызвавшеую и она заново выполняется, только вместо вызова функции находится возвращаемое ей выражение стоящее после return.
Пример создания простейшей функции:
К примеру есть код:
CODE:
int a=5, b=10, c=20;
int a1=6, b1=11, c1=21;
//нам необходимо произвести математические операции типа:
a=a+b+c; и a1=a1+b1+c1;
//реализуем это с помощью функции. создаем функцию с именем summa принимающую в виде параметров значения переменных с которыми необходимо произвести операции сложения и возвращающую результат.
function summa(int q, int w, int e)
{
return q+w+e;
}
//вызываем эту функцию в программе для a=a+b+c;
a=summa(a, b, c);
//вызываем эту функцию в программе для a1=a1+b1+c1;
a1=summa(a1, b1, c1);
int a1=6, b1=11, c1=21;
//нам необходимо произвести математические операции типа:
a=a+b+c; и a1=a1+b1+c1;
//реализуем это с помощью функции. создаем функцию с именем summa принимающую в виде параметров значения переменных с которыми необходимо произвести операции сложения и возвращающую результат.
function summa(int q, int w, int e)
{
return q+w+e;
}
//вызываем эту функцию в программе для a=a+b+c;
a=summa(a, b, c);
//вызываем эту функцию в программе для a1=a1+b1+c1;
a1=summa(a1, b1, c1);
Объявленные в параметрах и теле функций переменные видны только в этой функции и могут иметь одинаковые имена в разных функциях.
Это же относится и к команде перехода goto и их меткам.
Приведенный выше пример работает в такой простой ситуации. Но что делать если нам надо в функции произвести такую же операцию с масивами? Можно конечно сделать так:
CODE:
int a[100], b=10, c=20;
int n=0;
naz: if (n<100)
{
a[n]=summa(b, c);
n++;
goto naz;
}
function summa(int q, int w)
{
return q+w;
}
int n=0;
naz: if (n<100)
{
a[n]=summa(b, c);
n++;
goto naz;
}
function summa(int q, int w)
{
return q+w;
}
Но гораздо лучше не вызывать функцию 100 раз, а передать ей указатель на масив и за раз все сделать (Про указатели можно почитать в статье Указатели):
CODE:
int a[100], b=10, c=20;
summa(#a[0], b, c);
function summa(int #e, int q, int w)
{
int n=0;
naz: if (n<100)
{
e[n]=q+w;
n++;
goto naz;
}
}
summa(#a[0], b, c);
function summa(int #e, int q, int w)
{
int n=0;
naz: if (n<100)
{
e[n]=q+w;
n++;
goto naz;
}
}
В вышеприведенных примерах можно было вообще не передавать в параметрах переменные b и c, так как они объявлены в основном теле программы и видны в любом месте кода и в функции можно было их использовать напрямую.
6. Kibor - 27 Марта, 2020 - 06:36:19 - перейти к сообщению
Функции для идентификации окон и контролов.
Для работы с конкретным окном программы или каким нибудь контролом в нем необходимо индифицировать его среди множества других в системе. Для этого нужно получить на него указатель.
Идентификация одновременно множества окон с одинаковыми параметрами - Доработка функции windows. Поиск одновременно множества окон и запись в массив
Получение списка всех окон процесса, по указателю на любое открытое окно этим процессом. Пример получения указателей на окна блокнота с указателя на открытое дочерное окно "Заменить". -(для просмотра ссылки Вам необходимо авторизоваться)
Для хранения указателя объявляется переменная win:
win wind;
Затем вызывается функция window с известными нам параметрами по которым мы и будем индифицировать конкретный контрол или окно.
Индификация возможна по имени окна, имени класса, рамерам, позиции, родительским окнам или контролам. Для получения нужных нам параметров рекомендуется использовать встроенный в Кибор шпион, позволяющий получить все необходимые данные о нужном объекте и сгенерировать готовый указатель на онове выбранных нами настроек.
Подробнее об этом инструменте я остановлюсь позже, а пока приведу пример индификации кнопки с цифрой 5 в стардартном калькуляторе Windows 7.
Запускаем калькулятор. Переходим в Кибор на вкладку Шпион. Наводим мышку на калькулятор на кнопку которая нам нужна. Нажимаем сочетание клавиш CTRL+SHIFT+S.
Смотрим на параметры в разделе Контролы и выбираем те по которым можно выделить конкретно эту кнопку в системе.
Параметр Имя пусто, по нему не индифицируешь. Класс - Button. Почти каждая кнопка в Windows имеет такое название класса кнопки. Экранная позиция кнопки даст нам точный указатель на кнопку... пока калькулятор не будет сдвинут. Размер кнопки не подходит. В одном только калькуляторе их 26 одинаковых. Поэтому индифицируем по позиции относительно верхнего уникального контрола или главного окна. В данном случае нам подходит главное окно. Пока не будет запущено 2 калькулятора.
Выбираем галочку на вкладке котролы напротив Позиция контрола. Оставляем активной кнопку Окно и +Главное.
Пишем в редакторе кода:
оставляем курсор после = и нажимаем на поле где прописан готовый указатель на кнопку:
Ставим в конце строки « ; »
Указатель получен. Теперь о функции window:
В зависимости от количеста известных параметрой принимает различное количество переменных:
window("название окна") принимает один параметр string. Подходит если название окна или контрола уникальное.
window("название окна", "класс окна", win wind) индифицирует по имени, классу контрола и указателю на верхнее окно.
window("название окна", "класс окна", лев_верх_X, лев_верх_Y, шир, выс, win wind) индифицирует по имени, класу, позиции относительно верхнего контрола, размеру и указателю на верхний контрол. Если вместо указателя на верхний контрол поставить -1, позиция считается относительно левого верхнего угла экрана.
Любой параметр может быть заменен на -1. Тогда он не учитывается.
Возвращает указатель на окно или контрол или 0 если не может его индифицировать.
Пример кода нажимающего на кнопку 5 в калькуляторе:
При получение указателя автоматически создается структура:
Поиск одновременно множества окон с указанными параметрами так же осуществляется функцией window
Для этого надо первым параметром указать указатель на массив win
В этом случае функция window найдет все окна присутствующие в системе, соответствующие параметрам поиска, получит на них указатели которые запишет в массив win и заполнит его структуры для всех окон.
В таком случае функция возвращает количество найденных окон.
Пример:
Учтите, что все функции управления мышью и т.д используют клиентские координаты для независимости от ширины бордюра вокруг окна, что обеспечивает независимость от версии Windows и стиля оформления.
Для работы с конкретным окном программы или каким нибудь контролом в нем необходимо индифицировать его среди множества других в системе. Для этого нужно получить на него указатель.
Идентификация одновременно множества окон с одинаковыми параметрами - Доработка функции windows. Поиск одновременно множества окон и запись в массив
Получение списка всех окон процесса, по указателю на любое открытое окно этим процессом. Пример получения указателей на окна блокнота с указателя на открытое дочерное окно "Заменить". -(для просмотра ссылки Вам необходимо авторизоваться)
Для хранения указателя объявляется переменная win:
win wind;
Затем вызывается функция window с известными нам параметрами по которым мы и будем индифицировать конкретный контрол или окно.
Индификация возможна по имени окна, имени класса, рамерам, позиции, родительским окнам или контролам. Для получения нужных нам параметров рекомендуется использовать встроенный в Кибор шпион, позволяющий получить все необходимые данные о нужном объекте и сгенерировать готовый указатель на онове выбранных нами настроек.
Подробнее об этом инструменте я остановлюсь позже, а пока приведу пример индификации кнопки с цифрой 5 в стардартном калькуляторе Windows 7.
Запускаем калькулятор. Переходим в Кибор на вкладку Шпион. Наводим мышку на калькулятор на кнопку которая нам нужна. Нажимаем сочетание клавиш CTRL+SHIFT+S.
Смотрим на параметры в разделе Контролы и выбираем те по которым можно выделить конкретно эту кнопку в системе.
Параметр Имя пусто, по нему не индифицируешь. Класс - Button. Почти каждая кнопка в Windows имеет такое название класса кнопки. Экранная позиция кнопки даст нам точный указатель на кнопку... пока калькулятор не будет сдвинут. Размер кнопки не подходит. В одном только калькуляторе их 26 одинаковых. Поэтому индифицируем по позиции относительно верхнего уникального контрола или главного окна. В данном случае нам подходит главное окно. Пока не будет запущено 2 калькулятора.
Выбираем галочку на вкладке котролы напротив Позиция контрола. Оставляем активной кнопку Окно и +Главное.
Пишем в редакторе кода:
CODE:
win wind=
оставляем курсор после = и нажимаем на поле где прописан готовый указатель на кнопку:
CODE:
win wind=window (-1, "Button", 50, 161, -1, -1, window ("Калькулятор", "CalcFrame", -1));
Ставим в конце строки « ; »
Указатель получен. Теперь о функции window:
В зависимости от количеста известных параметрой принимает различное количество переменных:
window("название окна") принимает один параметр string. Подходит если название окна или контрола уникальное.
window("название окна", "класс окна", win wind) индифицирует по имени, классу контрола и указателю на верхнее окно.
window("название окна", "класс окна", лев_верх_X, лев_верх_Y, шир, выс, win wind) индифицирует по имени, класу, позиции относительно верхнего контрола, размеру и указателю на верхний контрол. Если вместо указателя на верхний контрол поставить -1, позиция считается относительно левого верхнего угла экрана.
Любой параметр может быть заменен на -1. Тогда он не учитывается.
Возвращает указатель на окно или контрол или 0 если не может его индифицировать.
Пример кода нажимающего на кнопку 5 в калькуляторе:
CODE:
win wind=window (-1, "Button", 50, 161, -1, -1, window ("Калькулятор", "CalcFrame", -1));
button(1, wind);
button(1, wind);
При получение указателя автоматически создается структура:
CODE:
win wind=window (-1, "Button", 50, 161, -1, -1, window ("Калькулятор", "CalcFrame", -1));
wind.width = ширина окна
wind.height = высота окна
wind.left = позиция по x относительно левого края экрана
wind.top = позиция по y относительно левого края экрана
wind.widthclient = ширина клиетской части окна (без системного меню и рамки)
wind.heightclient = высота клиетской части окна (без системного меню и рамки)
wind.leftclient = позиция клиетской части по x относительно левого края экрана
wind.topclient = позиция клиетской части по y относительно левого края экрана
wind.name = название окна
wind.class = название класса
wind.width = ширина окна
wind.height = высота окна
wind.left = позиция по x относительно левого края экрана
wind.top = позиция по y относительно левого края экрана
wind.widthclient = ширина клиетской части окна (без системного меню и рамки)
wind.heightclient = высота клиетской части окна (без системного меню и рамки)
wind.leftclient = позиция клиетской части по x относительно левого края экрана
wind.topclient = позиция клиетской части по y относительно левого края экрана
wind.name = название окна
wind.class = название класса
Поиск одновременно множества окон с указанными параметрами так же осуществляется функцией window
Для этого надо первым параметром указать указатель на массив win
В этом случае функция window найдет все окна присутствующие в системе, соответствующие параметрам поиска, получит на них указатели которые запишет в массив win и заполнит его структуры для всех окон.
В таком случае функция возвращает количество найденных окон.
Пример:
CODE:
win w[5];
int k=window (#w[0], "Безымянный — Блокнот", "Notepad", -1);
messagebox(k);
for (int n=0; n<k; n++)
{
messagebox(w.left[n]);
messagebox("HWND "+format(formatwi(w[n])));
}
int k=window (#w[0], "Безымянный — Блокнот", "Notepad", -1);
messagebox(k);
for (int n=0; n<k; n++)
{
messagebox(w.left[n]);
messagebox("HWND "+format(formatwi(w[n])));
}
Учтите, что все функции управления мышью и т.д используют клиентские координаты для независимости от ширины бордюра вокруг окна, что обеспечивает независимость от версии Windows и стиля оформления.
7. Kibor - 27 Марта, 2020 - 06:36:51 - перейти к сообщению
Переименование, сдвиг и изменение размеров окон.
В случае если есть возможность изменить размер окна, для стабильной работы скриптов необходимо при старте установить необходимый размер, который был в момент написания скрипта. Для этого существуют функции позволяющия изменить размер, позицию и название окна.
movewindow(wind);
В виде параметра принимает указатель на окно. Перед вызовом этой функции надо установить новые необходимые значения элементов структуры:
wind.width = новая ширина окна
wind.height = новая высота окна
wind.left = новая позиция по x относительно левого края экрана
wind.top = новая позиция по y относительно левого края экрана
wind.name = новое название окна
Изменяются только те элементы, параметры которых необходимо изменить. Все изменения расчитываются в экранных координатах.
В случае ошибки возвращает 0. В случае успеха 1;
Поскольку все функции используют не оконные, а клиентские координаты (без учета рамки вокруг окна), то для изменений размеров перед запуском скрипта необходимо воспользоваться другой функцией:
moveclient(wind);
В виде параметра принимает указатель на окно. Перед вызовом этой функции надо установить новые необходимые значения элементов структуры:
wind.widthclient = новая ширина клиетской части окна (без системного меню и рамки)
wind.heightclient = новая высота клиетской части окна (без системного меню и рамки)
wind.leftclient = новая позиция клиетской части по x относительно левого края экрана
wind.topclient = новая позиция клиетской части по y относительно левого края экрана
wind.name = новое название окна
Изменяются только те элементы, параметры которых необходимо изменить. Расчитывается клиентские размеры окна не учитывая рамер рамки вокруг окна.
В случае ошибки возвращает 0. В случае успеха 1;
Для активации и передаче фокуса перекрытому окну или конкретному контролу существует функция:
activate(wind);
В виде параметра принимает указатель на окно.
Если необходимо просто переименовать окно или контрол, например кнопку можно вызвать:
sendtext("Изменяем название окна или кнопки", wind);
Может вводить текст в текстовые поля с полной заменой текста.
Тут же опишу функцию для запуска программ и открытия файлов:
start ("путь к программе"); - запускает программу или файл
возвращает 1 при успехе. иначе 0.
Пример запуска блокнота в Windows 7:
string put="C:\Windows\System32 otepad.exe";
start (put);
Или:
start ("C:\Windows\System32 otepad.exe");
В случае если есть возможность изменить размер окна, для стабильной работы скриптов необходимо при старте установить необходимый размер, который был в момент написания скрипта. Для этого существуют функции позволяющия изменить размер, позицию и название окна.
movewindow(wind);
В виде параметра принимает указатель на окно. Перед вызовом этой функции надо установить новые необходимые значения элементов структуры:
wind.width = новая ширина окна
wind.height = новая высота окна
wind.left = новая позиция по x относительно левого края экрана
wind.top = новая позиция по y относительно левого края экрана
wind.name = новое название окна
Изменяются только те элементы, параметры которых необходимо изменить. Все изменения расчитываются в экранных координатах.
В случае ошибки возвращает 0. В случае успеха 1;
Поскольку все функции используют не оконные, а клиентские координаты (без учета рамки вокруг окна), то для изменений размеров перед запуском скрипта необходимо воспользоваться другой функцией:
moveclient(wind);
В виде параметра принимает указатель на окно. Перед вызовом этой функции надо установить новые необходимые значения элементов структуры:
wind.widthclient = новая ширина клиетской части окна (без системного меню и рамки)
wind.heightclient = новая высота клиетской части окна (без системного меню и рамки)
wind.leftclient = новая позиция клиетской части по x относительно левого края экрана
wind.topclient = новая позиция клиетской части по y относительно левого края экрана
wind.name = новое название окна
Изменяются только те элементы, параметры которых необходимо изменить. Расчитывается клиентские размеры окна не учитывая рамер рамки вокруг окна.
В случае ошибки возвращает 0. В случае успеха 1;
Для активации и передаче фокуса перекрытому окну или конкретному контролу существует функция:
activate(wind);
В виде параметра принимает указатель на окно.
Если необходимо просто переименовать окно или контрол, например кнопку можно вызвать:
sendtext("Изменяем название окна или кнопки", wind);
Может вводить текст в текстовые поля с полной заменой текста.
Тут же опишу функцию для запуска программ и открытия файлов:
start ("путь к программе"); - запускает программу или файл
возвращает 1 при успехе. иначе 0.
Пример запуска блокнота в Windows 7:
string put="C:\Windows\System32 otepad.exe";
start (put);
Или:
start ("C:\Windows\System32 otepad.exe");
8. Kibor - 27 Марта, 2020 - 06:37:21 - перейти к сообщению
Нажатие кнопок клавиатуры.
Для разных целей можно применять разные функции нажатий клавиш клавиатуры:
key(F1) - аналогично. Будет нажата клавиша F1 в активном окне, что вызовет открытие справки (при наличии)активной программы. Список всех клавиш ищите в интернете. Он аналогичен, только бе приставки VK_
Пример
activate(window (-1, "Edit", window ("Безымянный — Блокнот", "Notepad", -1)));// активировать поле Edit программы блокнот для нажатия клавиши в нем. (перед этим блокнот надо запустить)
Применяется для нажатий сочетаний клавиш. Пример отправки документа на печать:
Можно и так:
Это работает если не важен язык раскладки клавиатуры в окне, или изначально известен. Так как при нажатие A при русской раскладке напечатается Ф, а при английской A.
Следующие одноименные функции имеют гораздо более широкие возможности. Их можно применять например в чатах для корректного набора текста не зависимо от расскладки клавиатуры.
1 - символ или строка.
2 - если окно не активно, этот параметр со значением 1 активирует нужное окно или контрол передавая ему фокус, если 0 - не активирует.
3 - при 1 проверить соответствие раскладки языка в данном окне с языком вводимого символа и при необходимости переключить язык на нужный. Так же нажимается при необходимости Контрол при вводе символов для которых надо его зажать. Так же вводится правильный регистр. Проверяется по отдельности перед вводом каждого символа. Строка может состоять из русских и английских букв вперемешку большого и малого регистра и символов для которых надо зажать Контрол. Если 0 проверка и переключение не производится.
4 - указатель на окно или контрол. Если этот параметр 0 - в активном окне нажимается.
Аналогичо работают:
Вышеописанные функции иммитируют физическое нажатие клавиатуры в окнах, поэтому для их корректной работы необходимо чтобы они были активны.
Следующая функция позволяет напрямую отправлять окну или контролу сообщение о нажатие в нем кнопки. Поэтому работает с неактивными и свернутыми окнами без активации:
Эти функции передают нажатие и отпускание кнопки
Внимание - при вводе текста возможно повторение вводимого символа дважды. Эти функции следует использовать в играх.
Эти функции передают только нажатие если добавить второй параметр и установить его в 0. Двойного нажатия не будет при параметре 0
sendkey('a', 0, win wind);
sendkey("asd", 0, win wind);
sendkey(F1, 0, win wind);
Если второй параметр установить в 1 то будет как и в первом примере передаваться нажатие и отпускание кнопки:
Если последний параметр 0 - отправляется активному окну. Пример печанья в свернутом в трей окне блокнота:
Недостаток: при английской расскладке напечатано будет: ntrcn gtxfnftncz d cdthyenjv jryt
Эту функцию можно использовать к примеру для нажатий клавиш в неактивном окне игры.
Поддерживает нажатие шифта в зависимости от символа или регистра.
Следующая функция не иммет отношения к клавиатуре, но может вводить непосредственно текст, поэтому опишу ее тут:
Пример ввода текста в блокнот в свернутое окно без его активации:
Плюс в том что не зависит от расскладки. Текст будет на том языке на котором написан.
Недостаток или плюс (зависит от ситуации)- заменяется полностью весь текст на вводимый
Эта фунция может не только вводить текст в поля ввода, но и менять названия кнопок, имена окон и т.д.
Для разных целей можно применять разные функции нажатий клавиш клавиатуры:
CODE:
В виде параметра допускается использовать число int, соответствующее коду клавиши с таблицы. int допускается использовать только в функциях key, keydown, keyup принимающих один параметр.key('a') - нажимает и отпускает клавишу a. Нажатие происходит в активном окне или контроле. Если к примеру фокус стоит на контроле Edit, поле для ввода текста, в нем пропечатается символ 'a'. Проверка раскладки языка не производится. Будет напечатан символ текущего языка в этом окне.
CODE:
key(65) - нажимает и отпускает клавишу a. Нажатие происходит в активном окне или контроле. Если к примеру фокус стоит на контроле Edit, поле для ввода текста, в нем пропечатается символ 'a'. Проверка раскладки языка не производится. Будет напечатан символ текущего языка в этом окне.
CODE:
key("qwert") - нажимаются и отпускаются по очереди все клавиши, как бы печатая. Проверка раскладки языка не производится. Будут напечаты символы текущего языка в этом окне.
key(F1) - аналогично. Будет нажата клавиша F1 в активном окне, что вызовет открытие справки (при наличии)активной программы. Список всех клавиш ищите в интернете. Он аналогичен, только бе приставки VK_
Пример
activate(window (-1, "Edit", window ("Безымянный — Блокнот", "Notepad", -1)));// активировать поле Edit программы блокнот для нажатия клавиши в нем. (перед этим блокнот надо запустить)
CODE:
key("qwert");//Жмем клавиши qwert
keydown('a') - тоже самое, но только клавиша будет только нажата.
keyup('a') - тоже самое, но только клавиша будет только отпущена.
keydown('a') - тоже самое, но только клавиша будет только нажата.
keyup('a') - тоже самое, но только клавиша будет только отпущена.
Применяется для нажатий сочетаний клавиш. Пример отправки документа на печать:
CODE:
activate(window ("Безымянный — Блокнот", "Notepad", -1));//активировать окно программы блокнот
keydown(CONTROL);//нажать CTRL
keydown('p');//нажать p
keyup('p');//отпустить p
keyup(CONTROL);//отпустить CTRL
keydown(CONTROL);//нажать CTRL
keydown('p');//нажать p
keyup('p');//отпустить p
keyup(CONTROL);//отпустить CTRL
Можно и так:
CODE:
keydown(CONTROL);//нажать CTRL
key('p');//нажать отпустить p
keyup(CONTROL);//отпустить CTRL
key('p');//нажать отпустить p
keyup(CONTROL);//отпустить CTRL
Это работает если не важен язык раскладки клавиатуры в окне, или изначально известен. Так как при нажатие A при русской раскладке напечатается Ф, а при английской A.
Следующие одноименные функции имеют гораздо более широкие возможности. Их можно применять например в чатах для корректного набора текста не зависимо от расскладки клавиатуры.
CODE:
key('a', 1, 1, win wind) - принимает 4 параметра.
key("Ввести русский и English текст переключая раскладку клавиатуры", 1, 1, win wind)
key("Ввести русский и English текст переключая раскладку клавиатуры", 1, 1, win wind)
1 - символ или строка.
2 - если окно не активно, этот параметр со значением 1 активирует нужное окно или контрол передавая ему фокус, если 0 - не активирует.
3 - при 1 проверить соответствие раскладки языка в данном окне с языком вводимого символа и при необходимости переключить язык на нужный. Так же нажимается при необходимости Контрол при вводе символов для которых надо его зажать. Так же вводится правильный регистр. Проверяется по отдельности перед вводом каждого символа. Строка может состоять из русских и английских букв вперемешку большого и малого регистра и символов для которых надо зажать Контрол. Если 0 проверка и переключение не производится.
4 - указатель на окно или контрол. Если этот параметр 0 - в активном окне нажимается.
Аналогичо работают:
CODE:
keydown('a', 1, 1, win wind) - нажать
keyup('a', 1, 1, win wind) - отпустить
keyup('a', 1, 1, win wind) - отпустить
Вышеописанные функции иммитируют физическое нажатие клавиатуры в окнах, поэтому для их корректной работы необходимо чтобы они были активны.
Следующая функция позволяет напрямую отправлять окну или контролу сообщение о нажатие в нем кнопки. Поэтому работает с неактивными и свернутыми окнами без активации:
Эти функции передают нажатие и отпускание кнопки
CODE:
sendkey('a', win wind);
sendkey("asd", win wind);
sendkey(F1, win wind);
sendkey("asd", win wind);
sendkey(F1, win wind);
Внимание - при вводе текста возможно повторение вводимого символа дважды. Эти функции следует использовать в играх.
Эти функции передают только нажатие если добавить второй параметр и установить его в 0. Двойного нажатия не будет при параметре 0
sendkey('a', 0, win wind);
sendkey("asd", 0, win wind);
sendkey(F1, 0, win wind);
Если второй параметр установить в 1 то будет как и в первом примере передаваться нажатие и отпускание кнопки:
CODE:
sendkey('a', 1, win wind);
sendkey("asd", 1, win wind);
sendkey(F1, 1, win wind);
sendkey("asd", 1, win wind);
sendkey(F1, 1, win wind);
Если последний параметр 0 - отправляется активному окну. Пример печанья в свернутом в трей окне блокнота:
CODE:
sendkey("Текст печатается в свернутом окне", 0, window (-1, "Edit", window ("Безымянный — Блокнот", "Notepad", -1)));
Недостаток: при английской расскладке напечатано будет: ntrcn gtxfnftncz d cdthyenjv jryt
Эту функцию можно использовать к примеру для нажатий клавиш в неактивном окне игры.
Поддерживает нажатие шифта в зависимости от символа или регистра.
Следующая функция не иммет отношения к клавиатуре, но может вводить непосредственно текст, поэтому опишу ее тут:
Пример ввода текста в блокнот в свернутое окно без его активации:
CODE:
win wind=window (-1, "Edit", window ("Безымянный — Блокнот", "Notepad", -1));
sendtext("Текст вводится непосредственно без нажатий клавиатуры. Может в свернутое окно", wind);
sendtext("Текст вводится непосредственно без нажатий клавиатуры. Может в свернутое окно", wind);
Плюс в том что не зависит от расскладки. Текст будет на том языке на котором написан.
Недостаток или плюс (зависит от ситуации)- заменяется полностью весь текст на вводимый
Эта фунция может не только вводить текст в поля ввода, но и менять названия кнопок, имена окон и т.д.
9. Kibor - 27 Марта, 2020 - 06:38:11 - перейти к сообщению
Нажатие кнопок, захват и перетаскивание, передвижение мыши.
В Кибор можно программировать мышь на клик, двойной клик, перемещение и перетаскивание.
Клик:
Аналогично работают функции:
Следующие одноименные функции принимают дополнительно параметры в виде экранных координат клика (с левого верхнего угла экрана):
Аналогично:
Следующие функции позволяют работать с конкретными окнами или контролами в них:
Одинарный клик кнопками мыши в клиентских координатах относительно окна или контрола wind
Если четвертый параметр 1 - активировать окно перед кликом, если 0 - не активировать. Заменяет activate(win wind); Но лучше все же вызвать activate(win wind); перед работой с окном.
Если пятый параметр 0 или не найдено окно - координаты экранные.
Двойной клик:
Функция mousedbl работает аналогично фунции mouse и принимает такие же параметры
mousedbl производит двойной клик мышкой.
Перемещение мыши:
Если wind не найден или 0 кординаты экранные
Захват и перетаскивание мышью (устарело. рекомендуется использовать enablerealmouse):
Первый параметр - какая кнопка. Может быть: LEFT, MIDDLE, RIGHT и -1. Если -1 , перемещать мышь не нажимая кнопки с заданной скоростью.
Второй и третий - экранные координаты зажатия кнопки и захвата.
Четвертый и пятый - экранные координаты куда тащить и где отпустить кнопку.
Шестой - дробное число. Скорость перетаскивания.
Так же возмажно вызвать эу функцию с 8 параметрами:
Седьмой параметр - если 1 активировать окно, если 0 не активировать.
Восьмой - указатель на окно. Все координаты клиентские относительно окна wind.
Если восьмой параметр 0 или не найдено окно - экранные координаты.
В Кибор можно программировать мышь на клик, двойной клик, перемещение и перетаскивание.
Клик:
CODE:
mouse(LEFT); - одинарный клик левой кнопкой по текущим координатам под курсором
mouse(MIDDLE);- одинарный клик средней кнопкой по текущим координатам под курсором
mouse(RIGHT);- одинарный клик правой кнопкой по текущим координатам под курсором
mouse(MIDDLE);- одинарный клик средней кнопкой по текущим координатам под курсором
mouse(RIGHT);- одинарный клик правой кнопкой по текущим координатам под курсором
Аналогично работают функции:
CODE:
mousedown(LEFT); mousedown(MIDDLE); mousedown(RIGHT); - нажать
mouseup(LEFT); mouseup(MIDDLE); mouseup(RIGHT); - отпустить
mouseup(LEFT); mouseup(MIDDLE); mouseup(RIGHT); - отпустить
Следующие одноименные функции принимают дополнительно параметры в виде экранных координат клика (с левого верхнего угла экрана):
CODE:
mouse(RIGHT, 215, 175); - одинарный клик правой кнопкой по координатам экрана X 215, Y 175
mouse(MIDDLE, 215, 175);- одинарный клик средней кнопкой по координатам экрана X 215, Y 175
mouse(RIGHT, 215, 175);- одинарный клик правой кнопкой по координатам экрана X 215, Y 175
mouse(MIDDLE, 215, 175);- одинарный клик средней кнопкой по координатам экрана X 215, Y 175
mouse(RIGHT, 215, 175);- одинарный клик правой кнопкой по координатам экрана X 215, Y 175
Аналогично:
CODE:
mousedown(LEFT, 215, 175); mousedown(MIDDLE, 215, 175); mousedown(RIGHT, 215, 175); - нажать
mouseup(LEFT, 215, 175); mouseup(MIDDLE, 215, 175); mouseup(RIGHT, 215, 175); - отпустить
mouseup(LEFT, 215, 175); mouseup(MIDDLE, 215, 175); mouseup(RIGHT, 215, 175); - отпустить
Следующие функции позволяют работать с конкретными окнами или контролами в них:
CODE:
mouse(LEFT, кликX, кликY, 1, win wind);
mouse(MIDDLE, кликX, кликY, 1, win wind);
mouse(RIGHT, кликX, кликY, 1, win wind);
mouse(MIDDLE, кликX, кликY, 1, win wind);
mouse(RIGHT, кликX, кликY, 1, win wind);
Одинарный клик кнопками мыши в клиентских координатах относительно окна или контрола wind
Если четвертый параметр 1 - активировать окно перед кликом, если 0 - не активировать. Заменяет activate(win wind); Но лучше все же вызвать activate(win wind); перед работой с окном.
Если пятый параметр 0 или не найдено окно - координаты экранные.
Двойной клик:
Функция mousedbl работает аналогично фунции mouse и принимает такие же параметры
mousedbl производит двойной клик мышкой.
CODE:
mousedbl(LEFT);
mousedbl(MIDDLE, 215, 175);
mousedbl(RIGHT, кликX, кликY, 1, win wind);
mousedbl(MIDDLE, 215, 175);
mousedbl(RIGHT, кликX, кликY, 1, win wind);
Перемещение мыши:
CODE:
mousemove(237, 100) - устанавливает курсор мыши в экранные координаты 237, 100
mousemove(237, 100, win wind) - устанавливает курсор мыши в клиентские, а не оконные координаты 237, 100 окна или контрола wind
mousemove(237, 100, win wind) - устанавливает курсор мыши в клиентские, а не оконные координаты 237, 100 окна или контрола wind
Если wind не найден или 0 кординаты экранные
Захват и перетаскивание мышью (устарело. рекомендуется использовать enablerealmouse):
CODE:
mousetransfer(LEFT, стартX, стартY, финишX, финишY, 0.02);
Первый параметр - какая кнопка. Может быть: LEFT, MIDDLE, RIGHT и -1. Если -1 , перемещать мышь не нажимая кнопки с заданной скоростью.
Второй и третий - экранные координаты зажатия кнопки и захвата.
Четвертый и пятый - экранные координаты куда тащить и где отпустить кнопку.
Шестой - дробное число. Скорость перетаскивания.
Так же возмажно вызвать эу функцию с 8 параметрами:
CODE:
mousetransfer(LEFT, стартX, стартY, финишX, финишY, 0.02, 1, win wind);
Седьмой параметр - если 1 активировать окно, если 0 не активировать.
Восьмой - указатель на окно. Все координаты клиентские относительно окна wind.
Если восьмой параметр 0 или не найдено окно - экранные координаты.
10. Kibor - 27 Марта, 2020 - 06:38:40 - перейти к сообщению
Программное нажатие на кнопки в чужих активных или неактивных и свернутых окнах.
Для нажатия на кнопку в чужом окне существует функция button.
Синтаксис:
button(1, win wind);
Первый параметр - если 1 активировать и передавать на кнопку фокус перед нажатием.
Если 0 не активировать. В этом случае нажатие происходит даже в свернутом неактивном окне.
Второй - указатель на кнопку.
Пример нажатия кнопки в калькуляторе:
button(1, window (-1, "Button", 50, 161, -1, -1, window ("Калькулятор", "CalcFrame", -1)));
Для нажатия на кнопку в чужом окне существует функция button.
Синтаксис:
button(1, win wind);
Первый параметр - если 1 активировать и передавать на кнопку фокус перед нажатием.
Если 0 не активировать. В этом случае нажатие происходит даже в свернутом неактивном окне.
Второй - указатель на кнопку.
Пример нажатия кнопки в калькуляторе:
button(1, window (-1, "Button", 50, 161, -1, -1, window ("Калькулятор", "CalcFrame", -1)));