Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-45992
Smirnoff
2002-11-04 16:47
2002.11.14
Как попроще выделить из переменной-даты год?


3-45676
Serginio
2002-10-27 14:08
2002.11.14
Ктонибудь сравнивал ado и dbexpress при работе с MS SQL


1-45885
Sego
2002-11-05 17:13
2002.11.14
Работа с памятью


3-45787
max2057
2002-10-27 11:25
2002.11.14
Аналог PL/SQL в Interbase и MS SQL-сервере


1-45844
Azazello
2002-11-05 12:48
2002.11.14
TListBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский