Windows XP + Delphi 2007で開発を行っているのですが、
別プロセス(DOSなど)の入力要求に対応するような方法を
探しています。
例えば、
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle,
PAnsiChar('OPEN'),
PAnsiChar('sqlplus'),
'',
'',
SW_SHOW);
end;
とするとOracleのSQL*PLUSが起動されるわけですが、この時表示される
ユーザー名を入力してください:
パスワードを入力してください:
という入力要求を捕まえてTEditの値を渡し、結果をTMemoに
出力するような動作を実現したいと考えています。
※CreateProcessを用いて実行→結果を出力というサンプルは
見つかったのですが、入力要求に対応するようなものを
見つけることができませんでした・・・
ご存じの方がいましたらご教授いただけますでしょうか。
自己解決しましたのでご報告いたします。
--------
SCOTT
TIGER
--------
というテキストファイルを作成し、「sqlplus < c:\param.txt」を
バッチ実行することで実現できました。
procedure TForm1.Button1Click(Sender: TObject);
var
bat, param: TStrings;
path: String;
begin
bat := TStringList.Create;
param := TStringList.Create;
path := 'C:\TEMP\';
try
//バッチファイルを作成
bat.Add('sqlplus < + ' + path + ' + 'param.txt');
bat.SaveToFile(path + 'test.bat');
//入力要求に対する内容をテキストファイルに保存
param.Add('SCOTT');
param.Add('TIGER');
param.SaveToFile(path + 'param.txt');
//実行
ShellExecute(Handle,
PAnsiChar('OPEN'),
PAnsiChar(path + 'test.bat'),
'',
'',
SW_SHOW);
//作成したバッチ等の削除やら結果の出力やら
・
・
・
finally
bat.Free;
param.Free;
end;
end;
「バッチ 自動応答」あたりで検索すれば幸せになれたようです。。。