2016-08-04 6 views
0

На самом деле у меня есть одно настраиваемое приложение и вы хотите передать некоторые значения этому .exe, после чего он должен быть выполнен на некотором событии ex. он должен генерировать файлы автоматически.Открытое внешнее приложение с прохождением параметров с использованием приложения delphi

unit fExecuteExe; 

interface 

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

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    filename: String; 
begin 
    filename := 'C:\Testsrc\MojaveD5\Tools\AliasToDataview\Alias2DV.exe'; 
    ShellExecute(handle,'open',PChar(filename), '','',SW_SHOWNORMAL); 
end; 

end. 

Delphi Form

object Form1: TForm1 
    Left = 179 
    Top = 116 
    Width = 495 
    Height = 294 
    Caption = 'Form1' 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'MS Sans Serif' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Button1: TButton 
    Left = 176 
    Top = 96 
    Width = 113 
    Height = 25 
    Caption = 'Run Alias2Dataview' 
    TabOrder = 0 
    OnClick = Button1Click 
    end 
end 

Есть ли способ, что я могу открыть это приложение (изображение приводится ниже) и передать некоторые значения его текстовые поля и нажмите это кнопки? enter image description here

Это приложение не поддерживает командную строку. И, к сожалению, у меня только есть .exe, а не код.

+3

Автоматизируйте его с помощью автоматизации пользовательского интерфейса. –

ответ

2

Ели из всех не используют ShellExecute, потому что вы не знаете результат. Вы можете использовать

// Runs application and returns PID. 0 if failed. 
function RunApplication(const AExecutableFile, AParameters: string; 
    const AShowOption: Integer = SW_SHOWNORMAL): Integer; 
var 
    _SEInfo: TShellExecuteInfo; 
begin 
    Result := 0; 
    if not FileExists(AExecutableFile) then 
    Exit; 

    FillChar(_SEInfo, SizeOf(_SEInfo), 0); 
    _SEInfo.cbSize := SizeOf(TShellExecuteInfo); 
    _SEInfo.fMask := SEE_MASK_NOCLOSEPROCESS; 
    // _SEInfo.Wnd := Application.Handle; 
    _SEInfo.lpFile := PChar(AExecutableFile); 
    _SEInfo.lpParameters := PChar(AParameters); 
    _SEInfo.nShow := AShowOption; 
    if ShellExecuteEx(@_SEInfo) then 
    begin 
    WaitForInputIdle(_SEInfo.hProcess, 3000); 
    Result := GetProcessID(_SEInfo.hProcess); 
    end; 
end; 

Если приложение не поддерживает параметры командной строки, вы можете автоматизировать то, что хотите.

Например: Запустить приложение нужно дождаться появления его окна. Затем перечислите дочерние окна, а затем, когда у вас есть дескрипторы, вы можете сделать все: установить текст, кнопки и т. Д.