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

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

 Страниц (2): [1] 2 »   

> Описание: Вставка символов через sendkey
Duat
Отправлено: 21 Марта, 2021 - 15:32:53
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018  
Репутация: 0




Имеется код:
CODE:
win w_KIB;
int k, n;
string slovar[999];

w_KIB=window (-1, "Edit", window ("123 – Блокнот", "Notepad", -1));

if (fopen ("C:\00\123.txt", "r")!=0)
{
k=freadlineall(#slovar[0], 100);
fclose();
}
pause(1000);


pause(500);
for (n=0; n<k; n++)
{
sendkey(slovar[n], 0, w_KIB);
sleep(100);
sendkey(RETURN, 1, w_KIB); //при параметре 0, вставляет просто кучу переносов строк.

}
pause(1000);
sendmouse(LEFT, 545, 62, w_KIB);

Текст файла 123.txt:

CODE:
йцу
123
фыв
asd
$$$
❶❷❸❹❺❻❼❽❾❿


Собственно проблема:

Весь текст вставляет, а как только доходит до этих цифр, выдает ошибку: Используемый язык в функции "key" не поддерживается. Выберите русский или английский.

Как можно исправить данную ситуацию?

(Отредактировано автором: 21 Марта, 2021 - 15:34:06)

 
 Top
Kibor
Отправлено: 21 Марта, 2021 - 16:00:19
Post Id



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


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




Поправлю.
(Добавление)
Что то я не вижу проблемы
CODE:
win w_KIB=window (-1, "Edit", window ("Безымянный — Блокнот", "Notepad", -1));

char slovar[5]={'w', 's', '1', 'q', 'w'}


pause(500);
for (int n=0; n<5; n++)
{
sendkey(slovar[n], w_KIB);
sleep(100);
sendkey(RETURN, 1, w_KIB); //при параметре 0, вставляет просто кучу переносов строк.

}

Все вводит
 
 Top
Zireael
Отправлено: 21 Марта, 2021 - 18:00:58
Post Id



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


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




 Цитата:
Что то я не вижу проблемы

Цифры в кружочках это юникод, их sendkey не напечает.
 
 Top
Duat
Отправлено: 21 Марта, 2021 - 19:13:42
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018  
Репутация: 0




Проблема в том, что цифры в кружочках не вставляются. Можно ли что-то сделать, чтобы вставлялись?
 
 Top
Zireael
Отправлено: 21 Марта, 2021 - 20:30:47
Post Id



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


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




 Цитата:
Можно ли что-то сделать, чтобы вставлялись?

Вставить можно.
CODE:
external(INT, "SendMessage", "SendMessageW", "User32.dll" );

win w=window (-1, "Edit", window (-1, "Notepad", -1)); // блокнот

SendMessage(formatwi(w), WM_CHAR, 0x2776, 1); // 1 в кружочке
SendMessage(formatwi(w), WM_CHAR, 0x2777, 1); // 2
SendMessage(formatwi(w), WM_CHAR, 0x2778, 1); // 3
 
 Top
Duat
Отправлено: 21 Марта, 2021 - 20:38:58
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018  
Репутация: 0




А чтобы он из файла брал вместе с остальным текстом?
 
 Top
Zireael
Отправлено: 21 Марта, 2021 - 20:53:18
Post Id



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


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




 Цитата:
А чтобы он из файла брал вместе с остальным текстом?

Конвертировать файл в utf16. Тогда можно прочитать его в бинарном режиме и отправить все символы таким же способом.
(Добавление)
Если файл в utf8, то можно так:
CODE:
#define CP_UTF8 65001
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "SendMessage", "SendMessageW", "User32.dll");

char utf16[99999];
char utf8[99999];

win w=window (-1, "Edit", window (-1, "Notepad", -1));
if(w)
{
if (fopen ("C:\00\123.txt", "r")!=0)
{
initialarray(#utf8[0], 0);
int count = freadb(#utf8[0], sizearray(utf8));
fclose();

count = MultiByteToWideChar(CP_UTF8, 0, address(#utf8[0]), -1, address(#utf16[0]), sizearray(utf16));
for (int i=0; i<count*2; i=i+2)
{
int code = formatci(utf16[i]) + formatci(utf16[i+1]) * 256;
SendMessage(formatwi(w), WM_CHAR, code, 1);
}
}
else messagebox("Файл не найден");
}
else messagebox("Окно не найдено");
 
 Top
Duat
Отправлено: 27 Марта, 2021 - 14:13:11
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018  
Репутация: 0




 Zireael пишет:

CODE:
#define CP_UTF8 65001
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "SendMessage", "SendMessageW", "User32.dll");

char utf16[99999];
char utf8[99999];

win w=window (-1, "Edit", window (-1, "Notepad", -1));
if(w)
{
if (fopen ("C:\00\123.txt", "r")!=0)
{
initialarray(#utf8[0], 0);
int count = freadb(#utf8[0], sizearray(utf8));
fclose();

count = MultiByteToWideChar(CP_UTF8, 0, address(#utf8[0]), -1, address(#utf16[0]), sizearray(utf16));
for (int i=0; i<count*2; i=i+2)
{
int code = formatci(utf16[i]) + formatci(utf16[i+1]) * 256;
SendMessage(formatwi(w), WM_CHAR, code, 1);
}
}
else messagebox("Файл не найден");
}
else messagebox("Окно не найдено");


Работает прекрасно.

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

(Отредактировано автором: 27 Марта, 2021 - 14:13:52)

 
 Top
Duat
Отправлено: 27 Марта, 2021 - 16:48:42
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018  
Репутация: 0




Та, ошибочка. В блокноте прекрасно вставляет. В моем приложении, куда надо текст вставлять не переносится строка, если этим способом делать.

А есть еще какой либо способ вставки текста?

Вся проблема в том, что я не могу использовать копирование в буфер обмена, так как одновременно работает несколько окон, в каждое из которых вставляется свой текст.
 
 Top
Zireael
Отправлено: 27 Марта, 2021 - 18:29:26
Post Id



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


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




 Цитата:
В моем приложении, куда надо текст вставлять не переносится строка

Отправить символ переноса строки.
 Цитата:
SendMessage(formatwi(w), WM_CHAR, code, 1);

Заменить на:
CODE:
if(code==10)sendkey(13, w);
else SendMessage(formatwi(w), WM_CHAR, code, 1);
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by