Paskuda |
Отправлено: 19 Марта, 2021 - 21:55:01
|
Участник
Покинул форум
Сообщений всего: 61
Дата рег-ции: Янв. 2021
Репутация: 0
|
andre пишет: В блокноте работает.
Да, в блокноте работает нормально. Удалось выяснить что конкретно в игре иногда не срабатывают keydown(CONTROL) и keydown(SHIFT), играю с ноута.
Zireael пишет: В каком коде?
В приведённом коде не объявлены некоторые переменные.
Kibor пишет: А сейчас с буфером как?
Проверяйте значение переменной и что функция возвращает.
Все осталось по прежнему, разве что функция стала фиолетовой. Чтение с буфера срабатывает только после messagebox(); Вот конкретно проблемный участок кода оформил в виде отдельного скрипта
CODE:
int N,n;
win win_game=window ("MGCloud", "PlaykeyContainerClass", -1);
string
Name[10],
Patch="C:\Soft\kibor_set\Sorti\";
if(fopen (Patch+"6_Список.txt", "r")!=0) //В блокноте 6 наименований
{
N=freadlineall(#Name[0], 20);fclose();
}
activate(win_game);pause(1000);
sendlanguage("00000419",win_game);
//-----------------------------------
int x=30;
loop(10)
{
mousemove(x, 305);pause(500);
keydown(SHIFT);pause(500);
mouse(LEFT);pause(500);
keyup(SHIFT);pause(500);
mousemove(1025, 250);pause(500);
mousedbl(LEFT);pause(500);
keydown(CONTROL);pause(500);
key(67);pause(500);
keyup(CONTROL);pause(500);
key(ESCAPE);pause(500);
string name;
int r;
r=readclipboard(name);
//messagebox(r); //Так работает
//messagebox(name);
pause(2000);
for(n=0; n<N; n++)
{
if(Name[n]==name)
{
x=x+80;
break;
}
}
if(n==N)
{
x=x+40;
}
}
|
|
|
Zireael |
Отправлено: 19 Марта, 2021 - 22:13:55
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: messagebox(r); //Так работает
//messagebox(name);
Тогда что не работает?
Цитата: Name[10]
freadlineall(#Name[0], 20);
Выделен массив на 10 строк, а читаете 20, если в файле будет больше 10 строк, то будет крит. |
|
|
Paskuda |
Отправлено: 19 Марта, 2021 - 23:07:51
|
Участник
Покинул форум
Сообщений всего: 61
Дата рег-ции: Янв. 2021
Репутация: 0
|
Zireael пишет: Выделен массив на 10 строк, а читаете 20, если в файле будет больше 10 строк, то будет крит. В файле 6 строк, я там в коменте написал
Zireael пишет: Тогда что не работает?
Kibor пишет: Скопировать строку ниже
то что в буфере
Итак, у меня цикл шифтует в чат названия, затем копирует их из чата в буфер из буфера в переменную и сравнивает со списком. Если после readclipboard() не вставить любое сообщение messagebox() то текст из буфера не копируется в переменную, я не знаю почему так, может баг, вот еще раз мой код, ошибка возникает уже на 2 цикле если не вставлять messagebox("Бла бла"
CODE:
int N,n;
win win_game=window ("MGCloud", "PlaykeyContainerClass", -1);
string
Name[10],
Patch="C:\Soft\kibor_set\Sorti\";
if(fopen (Patch+"6_Список.txt", "r")!=0) //В блокноте 6 наименований
{
N=freadlineall(#Name[0], 20);fclose();
}
activate(win_game);pause(1000);
sendlanguage("00000419",win_game);
//-----------------------------------
int x=30;
for(int i=0; i<10; i++)
{
mousemove(x, 305);pause(500);
keydown(SHIFT);pause(1000);
mouse(LEFT);pause(500);
keyup(SHIFT);pause(500);
mousemove(1025, 250);pause(500);
mousedbl(LEFT);pause(500);
keydown(CONTROL);pause(1000);
key(67);pause(500);
keyup(CONTROL);pause(500);
key(ESCAPE);pause(500);
string name="";
int r;
r=readclipboard(name);
if(r==-1)
messagebox("ошибка r");
//messagebox("Бла бла"); //Любое сообщение
//pause(2000);
if(i==0 && name!="Имя 1")
{
messagebox("ошибка переменной");
}
if(i==1 && name!="Имя 2")
{
messagebox("ошибка переменной");
}
for(n=0; n<N; n++)
{
if(Name[n]==name)
{
x=x+80;
break;
}
}
if(n==N)
{
x=x+40;
}
}
Надеюсь понятно объяснил |
|
|
Paskuda |
Отправлено: 19 Марта, 2021 - 23:53:30
|
Участник
Покинул форум
Сообщений всего: 61
Дата рег-ции: Янв. 2021
Репутация: 0
|
Kibor пишет: Я задал простой вопрос.
Выложенный мной код работает?
У меня там значения в буфере меняются, да код работает, вызывается ошибка переменной
CODE:
string name="";
int r;
r=readclipboard(name);
if(r==-1)messagebox("ошибка r");
if(i==0 && name!="Имя 1")messagebox("ошибка переменной");
if(i==1 && name!="Имя 2")messagebox("ошибка переменной");
Zireael пишет: С чего сделано такое утверждение?
Запустите отладчик, поставьте галку сканировать значения переменных и запустите код. Что будет в переменной name?
Фрагмент 1 варианта отладки:
for ( int i = 0 ; i'-842150451' < 10 ; i'-842150451' ++ )
...
string name = " "
r = readclipboard ( name'' )
if ( r'1' == - 1 )
if ( i'0' == 0 && name'Имя 1' != " Имя 1 " )
if ( i'0' == 1 && name'Имя 1' != " Имя 2 " )
...
string name = " "
r = readclipboard ( name'' )
if ( r'1' == - 1 )
if ( i'1' == 0 && name'Имя 1' != " Имя 1 " )
if ( i'1' == 1 && name'Имя 1' != " Имя 2 " )
messagebox ( " ошибка переменной " )
2 вариант:
for ( int i = 0 ; i'-842150451' < 10 ; i'-842150451' ++ )
...
string name = " "
r = readclipboard ( name'' )
if ( r'1' == - 1 )
messagebox ( " Бла бла " )
pause ( 2000 )
if ( i'0' == 0 && name'Имя 1' != " Имя 1 " )
if ( i'0' == 1 && name'Имя 1' != " Имя 2 " )
...
string name = " "
r = readclipboard ( name'' )
if ( r'1' == - 1 )
messagebox ( " Бла бла " )
pause ( 2000 )
if ( i'1' == 0 && name'Имя 2' != " Имя 1 " )
if ( i'1' == 1 && name'Имя 2' != " Имя 2 " )
...
string name = " "
r = readclipboard ( name'' )
if ( r'1' == - 1 )
messagebox ( " Бла бла " )
pause ( 2000 )
if ( i'2' == 0 && name'Имя 3' != " Имя 1 " )
if ( i'2' == 1 && name'Имя 3' != " Имя 2 " )
...(Отредактировано автором: 20 Марта, 2021 - 00:01:42) |
|
|
Zireael |
Отправлено: 20 Марта, 2021 - 00:21:44
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Может не срабатывает Ctrl+C и readclipboard вообще не причём. Это же легко проверить.
CODE:string name="";
writeclipboard("Имя 1");
readclipboard(name);
textout(0, 0, 0, name, 1);
pause(2000);
writeclipboard("Имя 2");
readclipboard(name);
textout(0, 0, 0, name, 1);
pause(2000);
writeclipboard("Имя 3");
readclipboard(name);
textout(0, 0, 0, name, 1);
pause(2000); |
|
|
Kibor |
Отправлено: 20 Марта, 2021 - 08:08:25
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Paskuda пишет: У меня там значения в буфере меняются, да код работает, вызывается ошибка переменной
Я не спрашиваю что где меняется. Я спрашиваю исключительно по этому коду и действиям: Для его теста надо перезапустить компьютер. НИЧЕГО не запускать своего. Выполнить этот код скопировав в буфер сначала текст приведенный. И четко описать что получается.
Скопировать строку ниже
то что в буфере
CODE:string name="";
int r;
r=readclipboard(name);
if(r==-1)messagebox("ошибка r");
if(name!="то что в буфере")messagebox("ошибка переменной");
============
Никто не знает что и как еще юзает ваш буфер обмена.
Поэтому делайте такой тест. |
|
|
|