Delphi - как нажимать кнопочки в окне чужой программы.

jabbaxatt

Добрый модератор
Регистрация
21 Янв 2009
Сообщения
902
Реакции
432
Нужно в своей программе, при нажатии на кнопку, найти запущенный процесс чужой программы (известно его имя), если он запущен - получить его HWND, потом вставить в поле в этом окне текст из буфера и нажать кнопку (или клавишу Enter).

Где можно посмотреть примеры и разбор подобного кода?
 
Для просмотра ссылки Войди или Зарегистрируйся

Простой примерчик программы - определяет идентификатор элемента под курсором и позволяет прописать текст в указанный идентификатор.
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:
В. Рубанцев - Самоучитель Delphi в примерах, играх и программах. От простых приложений, решения задач и до программирования интеллектуальных игр

Д. Осипов - Delphi. Программирование для Windows, OS X, iOS и Android

Вот один из примеров:

Код:
var:
h1,h2: HWND;
begin
h1 := FindWindow(nil, 'Form1');
h2 := FindWindowEx(h1,0,'TRichEdit',nil);
SendMessage(h2, WM_SETTEXT, 0, lparam(LPCTSTR('вот ты где')));
end;

Зная Class Name можно заслать текст. Но как его посылать, если элемент закопан глубоко, а не лежит сразу на главной форме?
Перебирать все h1.....hn ???
h1 := FindWindow(nil, 'Form1');
h2 := FindWindowEx(h1,0,Class Name,nil);
..........
hn := FindWindowEx(hn-1,0,Class Name,nil);
SendMessage(hn, WM_SETTEXT, 0, lparam(LPCTSTR('вот ты где')));

и ещё почему-то в тестовой программе-доноре (накидал на форму разных компонентов для проверки) лежащая на главной форме кнопка SpeedButton1 с Caption := 'SENDER' не выполняет ни этот код:
h3 := FindWindowEx(h2,0,nil,'SEND');
PostMessage(h3, BM_CLICK, 0, 0);
ни этот:
h3 := FindWindowEx(h2,0,nil,'SEND');
SendMessage(h3, WM_LBUTTONDOWN, 0, 0);
SendMessage(h3, WM_LBUTTONUP, 0, 0);
 
Последнее редактирование модератором:
В. Рубанцев - Самоучитель Delphi в примерах, играх и программах. - советую
 
и нажать кнопку (или клавишу Enter)
для подобных целей нажимать виртуальные клавиши - только в крайнем случае, т.к. клик по кнопке и любые другие виндовые сообщения прилетят однозначно в нужное окно(если все правильно выбрано), даже если оно не в фокусе и т.д., а вот эмуляция нажатий на клавиши прилетит в текущее активное окно.
 
Книги Архангельского еще почитайте.
 
Назад
Сверху