Duat |
Отправлено: 21 Марта, 2021 - 15:32:53
|
Наблюдатель
Покинул форум
Сообщений всего: 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) |
|
|
Kibor |
Отправлено: 21 Марта, 2021 - 16:00:19
|
Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Поправлю.
(Добавление)
Что то я не вижу проблемы
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, вставляет просто кучу переносов строк.
}
Все вводит |
|
|
Zireael |
Отправлено: 21 Марта, 2021 - 20:30:47
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Можно ли что-то сделать, чтобы вставлялись?
Вставить можно.
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 |
|
|
Zireael |
Отправлено: 21 Марта, 2021 - 20:53:18
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А чтобы он из файла брал вместе с остальным текстом?
Конвертировать файл в 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("Окно не найдено"); |
|
|
Duat |
Отправлено: 27 Марта, 2021 - 14:13:11
|
Наблюдатель
Покинул форум
Сообщений всего: 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) |
|
|
Zireael |
Отправлено: 27 Марта, 2021 - 18:29:26
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: В моем приложении, куда надо текст вставлять не переносится строка
Отправить символ переноса строки.
Цитата: SendMessage(formatwi(w), WM_CHAR, code, 1);
Заменить на:
CODE:if(code==10)sendkey(13, w);
else SendMessage(formatwi(w), WM_CHAR, code, 1); |
|
|
|