Для этого в Кибор и собранных EXE присутствует специальный буфер размером в 1024 байта (переменная char имеет 1 байт). С помощью записи и чтения этого буфера можно обмениваться любыми данными. Как информационными так и управляющими.
Запись и чтение возможны как в свой буфер так и в буфер другой программы.
writebuffer - производит запись в свой буфер либо в буфер указанной программы.
readbuffer - производит чтение с своего буфера либо буфера указанной программы.
синтаксис
пишем в свой буфер
Цитата:
char ch[100];
ch[0]='f'; ch[1]='u'; // тд
writebuffer(#ch[0], 100);//пишем в свой буфер
ch[0]='f'; ch[1]='u'; // тд
writebuffer(#ch[0], 100);//пишем в свой буфер
первый параметр - указатель на массив char, данные с которого будем писать в буфер.
второй - количество записываемых байт.
пишем в буфер другой программы
Цитата:
win w=window ("Skript");
char ch[100];
ch[0]='f'; ch[1]='u'; // тд
writebuffer(#ch[0], 100, w);//пишем в буфер программы на которую указывает указатель w
char ch[100];
ch[0]='f'; ch[1]='u'; // тд
writebuffer(#ch[0], 100, w);//пишем в буфер программы на которую указывает указатель w
первый параметр - указатель на массив char, данные с которого будем писать в буфер.
второй - количество записываемых байт.
третий - указатель на программу в буфер которой пишем
Читаем с своего буфера
Цитата:
char ch[100];
readbuffer(#ch[0], 100);//Читаем с своего буфера
readbuffer(#ch[0], 100);//Читаем с своего буфера
первый параметр - указатель на массив char, в который запишутся считываемы е данные с буфера
второй - количество считываемых байт.
Читаем с буфера другой программы
Цитата:
win w=window ("Skript");
char ch[100];
readbuffer(#ch[0], 100, w);//Читаем с своего буфера программы на которую указывает указатель w
char ch[100];
readbuffer(#ch[0], 100, w);//Читаем с своего буфера программы на которую указывает указатель w
первый параметр - указатель на массив char, в который запишутся считываемы е данные с буфера
второй - количество считываемых байт.
третий - указатель на программу с буфера которой читаем
Функции возвращают 1 при удачной работе. или меньше 1 при ошибке.
Цитата:
char Command[1]={'A'};
writebuffer (#Command[0], 1);//Записываем в внутренний буффер программы символ 'A'
char b[1];
readbuffer(#b[0], 1);//Считываем с буффера первый один символ
if(b[0] == 'A')
{
messagebox (b[0]);
}
writebuffer (#Command[0], 1);//Записываем в внутренний буффер программы символ 'A'
char b[1];
readbuffer(#b[0], 1);//Считываем с буффера первый один символ
if(b[0] == 'A')
{
messagebox (b[0]);
}
Данные функции работаю асинхронно (не отанавливают и не тормозят процессы)
Связь возможна с помощью двух вариантов
1)положить в свой буфер и заниматься своими делами. когда другой программе понадобится она прочитает.
2)положить в буфер другой программы и заниматься своими делами. когда другая программа проверит свой буфер она прочитает с него.
=========================================================
Простой пример управления другой программой путем записи в ее буфер одного знака.
код управляющей программы. при нажатие на кнопки 0-9 она записывает свой символ в буфер программы p2
CODE:
char s='n';
win w=window ("p2");
lop:;
if (w==0)w=window ("p2");
if (getkeystate(49)==1){s='1';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(50)==1){s='2';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(51)==1){s='3';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(52)==1){s='4';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(53)==1){s='5';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(54)==1){s='6';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(55)==1){s='7';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(56)==1){s='8';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(57)==1){s='9';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(48)==1){s='0';if (writebuffer(#s, 1, w)<1) goto er;}
sleep(10);
goto lop;
er:;
win w=window ("p2");
lop:;
if (w==0)w=window ("p2");
if (getkeystate(49)==1){s='1';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(50)==1){s='2';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(51)==1){s='3';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(52)==1){s='4';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(53)==1){s='5';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(54)==1){s='6';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(55)==1){s='7';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(56)==1){s='8';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(57)==1){s='9';if (writebuffer(#s, 1, w)<1) goto er;}
if (getkeystate(48)==1){s='0';if (writebuffer(#s, 1, w)<1) goto er;}
sleep(10);
goto lop;
er:;
код управляемой программы. (собрать в exe и назвать p2 (на английском)).
при чтение своего буфера в зависимостьи от символа печатает его и воспроизводит звук
CODE:
char s;
lop:;
if (readbuffer(#s, 1)<1) goto er;
if (s=='1')beep(100, 200);
if (s=='2')beep(200, 200);
if (s=='3')beep(300, 200);
if (s=='4')beep(400, 200);
if (s=='5')beep(500, 200);
if (s=='6')beep(600, 200);
if (s=='7')beep(700, 200);
if (s=='8')beep(800, 200);
if (s=='9')beep(900, 200);
if (s=='0')beep(1000, 200);
textout(0, 100, 50, format(#s), 1);
sleep(10);
goto lop;
er:;
lop:;
if (readbuffer(#s, 1)<1) goto er;
if (s=='1')beep(100, 200);
if (s=='2')beep(200, 200);
if (s=='3')beep(300, 200);
if (s=='4')beep(400, 200);
if (s=='5')beep(500, 200);
if (s=='6')beep(600, 200);
if (s=='7')beep(700, 200);
if (s=='8')beep(800, 200);
if (s=='9')beep(900, 200);
if (s=='0')beep(1000, 200);
textout(0, 100, 50, format(#s), 1);
sleep(10);
goto lop;
er:;
=========================================================
Простой пример управления другой программой путем записи в свой буфер одного знака.
код управляющей программы. при нажатие на кнопки 0-9 она записывает свой символ в свой буфер, с которого уже управляющая почитает сама. (собрать эту в exe и назвать p1 (на английском))
CODE:
char s='n';
lop:;
if (getkeystate(49)==1){s='1';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(50)==1){s='2';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(51)==1){s='3';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(52)==1){s='4';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(53)==1){s='5';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(54)==1){s='6';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(55)==1){s='7';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(56)==1){s='8';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(57)==1){s='9';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(48)==1){s='0';if (writebuffer(#s, 1)<1) goto er;}
sleep(10);
goto lop;
er:;
lop:;
if (getkeystate(49)==1){s='1';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(50)==1){s='2';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(51)==1){s='3';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(52)==1){s='4';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(53)==1){s='5';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(54)==1){s='6';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(55)==1){s='7';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(56)==1){s='8';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(57)==1){s='9';if (writebuffer(#s, 1)<1) goto er;}
if (getkeystate(48)==1){s='0';if (writebuffer(#s, 1)<1) goto er;}
sleep(10);
goto lop;
er:;
код управляемой программы. при чтение буфера программы p1 в зависимостьи от символа печатает его и воспроизводит звук
CODE:
char s;
win w=window ("p1");
lop:;
if (w==0)w=window ("p1");
if (readbuffer(#s, 1, w)<1) goto er;
if (s=='1')beep(100, 200);
if (s=='2')beep(200, 200);
if (s=='3')beep(300, 200);
if (s=='4')beep(400, 200);
if (s=='5')beep(500, 200);
if (s=='6')beep(600, 200);
if (s=='7')beep(700, 200);
if (s=='8')beep(800, 200);
if (s=='9')beep(900, 200);
if (s=='0')beep(1000, 200);
textout(0, 100, 50, format(#s), 1);
sleep(10);
goto lop;
er:;
win w=window ("p1");
lop:;
if (w==0)w=window ("p1");
if (readbuffer(#s, 1, w)<1) goto er;
if (s=='1')beep(100, 200);
if (s=='2')beep(200, 200);
if (s=='3')beep(300, 200);
if (s=='4')beep(400, 200);
if (s=='5')beep(500, 200);
if (s=='6')beep(600, 200);
if (s=='7')beep(700, 200);
if (s=='8')beep(800, 200);
if (s=='9')beep(900, 200);
if (s=='0')beep(1000, 200);
textout(0, 100, 50, format(#s), 1);
sleep(10);
goto lop;
er:;
============================================
с помощью функций форматирования можно преобразовать данные массива char в любой тип
Преобразование одного типа данных к другому
format- Привод целго число int или дробного double к string
formatsn- Преобразование строк в которых записаны числа в натуральное число int или double
formatci- Возвращает int char'а значения в параметре
formatic- Возвращает char чисового значения в параметре
strcpy- Копирование string в массив char
codhex- Переводит целые или дробные числа (до 4 байт) в HEX (справа на лево)
codhexi- Переводит шестнадцатеричный HEX код в целое число int (справа на лево).
======================================
Данный скрипт позволяет запускать всего один EXE бота нужное количество раз (сколько окон игры) и каждая копия привяжется автоматически к своему окну игры.
Не зависим от названий окон игры.
Код (Отобразить)
EXE бота надо переименовать в "bots.exe"
1 - Запустим 3 окна игры (в данном случае блокнота)
2 - Запустим 3 копии bots.exe
3 - Нажмем в каждой - Запустить
4 - Через пару секунд нажмем конрл шифт Z и остановим боты.
5 - Увидим что названия ботов поменялись и приняли заголовки окон блокнотов к которым привязаны.