Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Вызов внешней программы и работа с ней   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-45844
Azazello
2002-11-05 12:48
2002.11.14
TListBox


1-45966
Дмитрий К.К.
2002-11-02 05:42
2002.11.14
Весь ImageList в один файл


3-45690
boa
2002-10-28 09:23
2002.11.14
Краткий справочник по MS SQL


3-45698
Vityanya
2002-10-27 03:12
2002.11.14
БД


8-46013
_alx_
2002-07-24 13:50
2002.11.14
Помогите!!!!!!!! Горю!!!!!!!