Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизВызов внешней программы и работа с ней Найти похожие ветки
← →
prorok2 (2002-11-04 12:34) [0]Добрый день!
Подскажите, как мне вызвать из своей программы какую то внешнюю программу (блокнот, калькулятор, например), набрать текст или понажимать клавиши, внести текст в строку ввода и т.п. и потом закрыть это приложение.
← →
Skier (2002-11-04 12:35) [1]>prorok2
WinExec(...)
ShellExecute(...)
ShellExecuteEx(...)
CreateProcess(...)
← →
prorok2 (2002-11-04 12:40) [2]Я так понимаю, что это функции вызова программы, а как понажимать на кнопки и вводить текст в строку ввода?
← →
Skier (2002-11-04 12:42) [3]>prorok2
> а как понажимать на кнопки и вводить текст в строку ввода?
Если во внешней программе, то - сообщения помогут.
Но надо знать что и как посылать.
← →
prorok2 (2002-11-04 12:45) [4]Ну так я и прошу кинуть хотя бы небольшой код, который посылает сообщения (я так понимаю с помощью функции SendMessage?) кнопке и строке ввода и собственно нажимает и вводит текст. Буду очень благодарен.
← →
Guellirro (2002-11-04 13:39) [5]вот тебе небольшой примерчик :
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 13:42) [6]Спасибо большое
← →
Song (2002-11-04 13:46) [7]2prorok2 (04.11.02 12:45)
Вы поймите что нет универсального кода, который бы мог "нажимать кнопочки", "вводить символы" в любых внешних приложениях. Каждое приложение устроено по разному. Откройте WinSight и посмотрите иерарихю объектов АПИ внутри любого приложения. Везде разные объекты с разным расположением. А посылать сообщение WM_SETTEXT например надо на конкретный объект, а как узнать где именно он находится?
Поэтому для каждого конкретного внешнего файла надо отдельный алгоритм посылки (точнее алгоритм определения результирующего окна).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.095 c