Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов внешней программы и работа с ней [D6, WinXP]


prorok2 ©   (2002-11-04 12:34:00) 

Добрый день!
Подскажите, как мне вызвать из своей программы какую то внешнюю программу (блокнот, калькулятор, например), набрать текст или понажимать клавиши, внести текст в строку ввода и т.п. и потом закрыть это приложение.


Song   (2002-11-04 13:46:00) [1]

2prorok2 (04.11.02 12:45)
Вы поймите что нет универсального кода, который бы мог "нажимать кнопочки", "вводить символы" в любых внешних приложениях. Каждое приложение устроено по разному. Откройте WinSight и посмотрите иерарихю объектов АПИ внутри любого приложения. Везде разные объекты с разным расположением. А посылать сообщение WM_SETTEXT например надо на конкретный объект, а как узнать где именно он находится?
Поэтому для каждого конкретного внешнего файла надо отдельный алгоритм посылки (точнее алгоритм определения результирующего окна).


prorok2   (2002-11-04 13:42:00) [2]

Спасибо большое


Guellirro   (2002-11-04 13:39:00) [3]

вот тебе небольшой примерчик :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;

type
TForm1 = class(TForm)
btnOpen: TButton;
btnFill: TButton;
btnClose: TButton;
procedure btnOpenClick(Sender: TObject);
procedure btnFillClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;



implementation

{$R *.dfm}

procedure TForm1.btnOpenClick(Sender: TObject);
{ открываем блокнот }
begin
if FindWindow("NotePad",nil) < 32 then ShellExecute(Handle,nil,"notepad",nil,nil,SW_SHOWNORMAL);
end;

procedure TForm1.btnFillClick(Sender: TObject);
{ вставляем строку }
Const
Text = "Hello World !";
var
H, WND : HWND;
I : Integer;
begin
WND := FindWindow("notepad",nil);
if WND > 32 then
begin
H := FindWindowEx(WND,0,"edit",nil);
If H > 32 then for I := 1 to Length(Text) do SendMessage(H,WM_CHAR,Ord(Text[I]),0);
end;
end;

procedure TForm1.btnCloseClick(Sender: TObject);
{ закрываем блокнот }
var
WND : HWND;
begin
WND := FindWindow("notepad",nil);
if WND > 32 then SendMessage(WND,WM_SYSCOMMAND,SC_CLOSE,0)
end;

end.


prorok2   (2002-11-04 12:45:00) [4]

Ну так я и прошу кинуть хотя бы небольшой код, который посылает сообщения (я так понимаю с помощью функции SendMessage?) кнопке и строке ввода и собственно нажимает и вводит текст. Буду очень благодарен.


Skier   (2002-11-04 12:42:00) [5]

>prorok2

> а как понажимать на кнопки и вводить текст в строку ввода?

Если во внешней программе, то - сообщения помогут.
Нонадо знать что и как посылать.


prorok2   (2002-11-04 12:40:00) [6]

Я так понимаю, что это функции вызова программы, а как понажимать на кнопки и вводить текст в строку ввода?


Skier   (2002-11-04 12:35:00) [7]

>prorok2
WinExec(...)
ShellExecute(...)
ShellExecuteEx(...)
CreateProcess(...)



Наверх

Титульная страница Поиск, карта сайта Написать письмо