Пишу на делфи.
h := findwindow(nil, 'Приложение с окном ввода');
Приложение содержит только форму ввода текста
Как можно средствами WINAPI вставить текст в форму найденного окна?
Можно как нибудь в SendMessage передать?
Другие языки программирования и технологии
SendMessages передать окну строку
Конечно, дикое извращение и позор, но когда-то, за неимением под рукой ничего лучше, я передавал текст в чужое окно WM_KEYDOWN-ами примерно так:
function LowByte(S :Char) :Byte;
begin
case S of
'Й' : Result := Ord('Q');
'Ц' : Result := Ord('W');
'У' : Result := Ord('E');
'К' : Result := Ord('R');
'Е' : Result := Ord('T');
'Н' : Result := Ord('Y');
'Г' : Result := Ord('U');
'Ш' : Result := Ord('I');
'Щ' : Result := Ord('O');
'З' : Result := Ord('P');
'Х' : Result := 219;
'Ъ' : Result := Ord(']');
'Ф' : Result := Ord('A');
'Ы' : Result := Ord('S');
'В' : Result := Ord('D');
'А' : Result := Ord('F');
'П' : Result := Ord('G');
'Р' : Result := Ord('H');
'О' : Result := Ord('J');
'Л' : Result := Ord('K');
'Д' : Result := Ord('L');
'Ж' : Result := Ord(';');
'Э' : Result := Ord('''');
'Я' : Result := Ord('Z');
'Ч' : Result := Ord('X');
'С' : Result := Ord('C');
'М' : Result := Ord('V');
'И' : Result := Ord('B');
'Т' : Result := Ord('N');
'Ь' : Result := Ord('M');
'Б' : Result := 188;
'Ю' : Result := Ord('.');
'.' : Result := 191;
' ' : Result := Ord(' ');
'0' : Result := Ord('0');
'1' : Result := Ord('1');
'2' : Result := Ord('2');
'3' : Result := Ord('3');
'4' : Result := Ord('4');
'5' : Result := Ord('5');
'6' : Result := Ord('6');
'7' : Result := Ord('7');
'8' : Result := Ord('8');
'9' : Result := Ord('9');
'-' : Result := 189;
#13 : Result := 13;
end;
end;
function HighByte(S :Char):Byte;
begin
case S of
'Й' : Result := 16;
'Ц' : Result := 17;
'У' : Result := 18;
'К' : Result := 19;
'Е' : Result := 20;
'Н' : Result := 21;
'Г' : Result := 22;
'Ш' : Result := 23;
'Щ' : Result := 24;
'З' : Result := 25;
'Х' : Result := 26;
'Ъ' : Result := 27;
'Ф' : Result := 30;
'Ы' : Result := 31;
'В' : Result := 32;
'А' : Result := 33;
'П' : Result := 34;
'Р' : Result := 35;
'О' : Result := 36;
'Л' : Result := 37;
'Д' : Result := 38;
'Ж' : Result := 39;
'Э' : Result := 40;
'Я' : Result := 44;
'Ч' : Result := 45;
'С' : Result := 46;
'М' : Result := 47;
'И' : Result := 48;
'Т' : Result := 49;
'Ь' : Result := 50;
'Б' : Result := 51;
'Ю' : Result := 52;
'.' : Result := 53;
' ' : Result := 57;
'0' : Result := 11;
'1' : Result := 2;
'2' : Result := 3;
'3' : Result := 4;
'4' : Result := 5;
'5' : Result := 6;
'6' : Result := 7;
'7' : Result := 8;
'8' : Result := 9;
'9' : Result := 10;
'-' : Result := 12;
#13 : Result := 28;
end;
end;
procedure SendString(H :THandle; S :String);
var j :Integer;
begin
for j := 1 to Length(S)
do begin
SendMessage(H,WM_KEYDOWN,LowByte(S[j]),1+HighByte(S[j]) shl 16);
end;
end;
function LowByte(S :Char) :Byte;
begin
case S of
'Й' : Result := Ord('Q');
'Ц' : Result := Ord('W');
'У' : Result := Ord('E');
'К' : Result := Ord('R');
'Е' : Result := Ord('T');
'Н' : Result := Ord('Y');
'Г' : Result := Ord('U');
'Ш' : Result := Ord('I');
'Щ' : Result := Ord('O');
'З' : Result := Ord('P');
'Х' : Result := 219;
'Ъ' : Result := Ord(']');
'Ф' : Result := Ord('A');
'Ы' : Result := Ord('S');
'В' : Result := Ord('D');
'А' : Result := Ord('F');
'П' : Result := Ord('G');
'Р' : Result := Ord('H');
'О' : Result := Ord('J');
'Л' : Result := Ord('K');
'Д' : Result := Ord('L');
'Ж' : Result := Ord(';');
'Э' : Result := Ord('''');
'Я' : Result := Ord('Z');
'Ч' : Result := Ord('X');
'С' : Result := Ord('C');
'М' : Result := Ord('V');
'И' : Result := Ord('B');
'Т' : Result := Ord('N');
'Ь' : Result := Ord('M');
'Б' : Result := 188;
'Ю' : Result := Ord('.');
'.' : Result := 191;
' ' : Result := Ord(' ');
'0' : Result := Ord('0');
'1' : Result := Ord('1');
'2' : Result := Ord('2');
'3' : Result := Ord('3');
'4' : Result := Ord('4');
'5' : Result := Ord('5');
'6' : Result := Ord('6');
'7' : Result := Ord('7');
'8' : Result := Ord('8');
'9' : Result := Ord('9');
'-' : Result := 189;
#13 : Result := 13;
end;
end;
function HighByte(S :Char):Byte;
begin
case S of
'Й' : Result := 16;
'Ц' : Result := 17;
'У' : Result := 18;
'К' : Result := 19;
'Е' : Result := 20;
'Н' : Result := 21;
'Г' : Result := 22;
'Ш' : Result := 23;
'Щ' : Result := 24;
'З' : Result := 25;
'Х' : Result := 26;
'Ъ' : Result := 27;
'Ф' : Result := 30;
'Ы' : Result := 31;
'В' : Result := 32;
'А' : Result := 33;
'П' : Result := 34;
'Р' : Result := 35;
'О' : Result := 36;
'Л' : Result := 37;
'Д' : Result := 38;
'Ж' : Result := 39;
'Э' : Result := 40;
'Я' : Result := 44;
'Ч' : Result := 45;
'С' : Result := 46;
'М' : Result := 47;
'И' : Result := 48;
'Т' : Result := 49;
'Ь' : Result := 50;
'Б' : Result := 51;
'Ю' : Result := 52;
'.' : Result := 53;
' ' : Result := 57;
'0' : Result := 11;
'1' : Result := 2;
'2' : Result := 3;
'3' : Result := 4;
'4' : Result := 5;
'5' : Result := 6;
'6' : Result := 7;
'7' : Result := 8;
'8' : Result := 9;
'9' : Result := 10;
'-' : Result := 12;
#13 : Result := 28;
end;
end;
procedure SendString(H :THandle; S :String);
var j :Integer;
begin
for j := 1 to Length(S)
do begin
SendMessage(H,WM_KEYDOWN,LowByte(S[j]),1+HighByte(S[j]) shl 16);
end;
end;
Похожие вопросы
- C передать строку 1 параметра в массив
- QBASIC сформировать мосив состоящая С М-строк,и М-столбцов
- ассемблер, проверка длины строки
- Напишите программу для С++, которая заменяет в символьной строке все буквы a на буквы b, буквы A на буквы B ...
- С++.Обработка строк при помощи указателей.
- FASM. Замена символов в строке, используя подпрограммы.
- Указатели на строки в C++
- простейший код в Делфи: проверка строки на корректность символов
- замена слов в строках С++
- Си работа со строками. Нужна помощь
Теперь разобрался, сделал так:
program Project2;
uses
Windows,Messages,Dialogs;
{$R *.res}
var
h: HWND;
s: pchar;
EditControl : HWND;
begin
s := 'fynbdbhecj,jchfkcz';
h := FindWindow(nil,'Ââîä ïàðîëÿ');
if h <> 0 then
begin
EditControl := FindWindowEx(h, 0, 'Edit', nil);
SendMessage(EditControl, WM_SETTEXT, 0, integer(s));
PostMessage(h, WM_KEYDOWN, VK_RETURN, 1);
PostMessage(h, WM_KEYUP, VK_RETURN, 1);
end;
end.
Размер проги - 15кб.
Для определения класса контролов использовал программу WindowScanner