別プロセスの入力要求に対応したい

解決


鼻セレブ  2009-10-07 10:56:55  No: 35840  IP: 192.*.*.*

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を用いて実行→結果を出力というサンプルは
  見つかったのですが、入力要求に対応するようなものを
  見つけることができませんでした・・・

ご存じの方がいましたらご教授いただけますでしょうか。

編集 削除
鼻セレブ  2009-10-09 11:10:25  No: 35841  IP: 192.*.*.*

自己解決しましたのでご報告いたします。

--------
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;

「バッチ 自動応答」あたりで検索すれば幸せになれたようです。。。

編集 削除