Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Вставка символов через sendkey

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

1. Duat - 21 Марта, 2021 - 08:32:53 - перейти к сообщению
Имеется код:
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" не поддерживается. Выберите русский или английский.

Как можно исправить данную ситуацию?
2. Kibor - 21 Марта, 2021 - 09:00:19 - перейти к сообщению
Поправлю.
(Добавление)
Что то я не вижу проблемы
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, вставляет просто кучу переносов строк.

}

Все вводит
3. Zireael - 21 Марта, 2021 - 11:00:58 - перейти к сообщению
 Цитата:
Что то я не вижу проблемы

Цифры в кружочках это юникод, их sendkey не напечает.
4. Duat - 21 Марта, 2021 - 12:13:42 - перейти к сообщению
Проблема в том, что цифры в кружочках не вставляются. Можно ли что-то сделать, чтобы вставлялись?
5. Zireael - 21 Марта, 2021 - 13:30:47 - перейти к сообщению
 Цитата:
Можно ли что-то сделать, чтобы вставлялись?

Вставить можно.
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
6. Duat - 21 Марта, 2021 - 13:38:58 - перейти к сообщению
А чтобы он из файла брал вместе с остальным текстом?
7. Zireael - 21 Марта, 2021 - 13:53:18 - перейти к сообщению
 Цитата:
А чтобы он из файла брал вместе с остальным текстом?

Конвертировать файл в 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("Окно не найдено");
8. Duat - 27 Марта, 2021 - 07:13:11 - перейти к сообщению
 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("Окно не найдено");


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

А можно сделать, чтобы код еще перенос строк из файла брал? А то получается сплошной текст.
9. Duat - 27 Марта, 2021 - 09:48:42 - перейти к сообщению
Та, ошибочка. В блокноте прекрасно вставляет. В моем приложении, куда надо текст вставлять не переносится строка, если этим способом делать.

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

Вся проблема в том, что я не могу использовать копирование в буфер обмена, так как одновременно работает несколько окон, в каждое из которых вставляется свой текст.
10. Zireael - 27 Марта, 2021 - 11:29:26 - перейти к сообщению
 Цитата:
В моем приложении, куда надо текст вставлять не переносится строка

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

Заменить на:
CODE:
if(code==10)sendkey(13, w);
else SendMessage(formatwi(w), WM_CHAR, code, 1);

Powered by ExBB FM 1.0 Final