16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"他のプログラムの出力結果を得る"
この発言に対し以下のコメントが寄せられています
#01207 大怪獣もぎゃ さん RE:他のプログラムの出力結果を得る
もぎゃあ♪
大怪獣もぎゃです。
nifty:FDELPHI/MES/06/32648 雲松さん SpecialThanks!
たとえばフォームにメモを貼って、そこにDOSプロンプトの
Dirコマンドの結果を吐き出したりなんかするために、
他のプログラムの出力結果を自分で受け取るサンプルです。
今の状態だと、NT系のOSでしか動かないので、
本当はtodoにあるような対応をする必要があります。
function getProcessResult(process:string):string;
//process:実行するプログラム。引数も含めて全部書く。
//result:出力結果。複数行の時も一行で返すので、
// Memo.lines.textにでも代入してください。
var
uniqueName,batFileName,resFileName:string;
batFile,resultFile:TStringList;
SI :TStartupInfo;
PI :TProcessInformation;
begin
result := '';
{以下の三つ、自作の関数を使ってますが、それぞれ
Windowsのテンポラリディレクトリを持ってくる関数と、
日付と時刻を使ってユニークな名前を作る関数です。
めんどくさかったら、'c:\windows\temp'などと直書きしてください^^;}
uniqueName := getLocalUniqueName;
batFileName := getTempDir+uniqueName+'bat.bat';
resFileName := getTempDir+uniqueName+'res.dat';
//・TStlingListに実行したいDOSコマンドを追加し、BATファイルとして保存
batFile:=TStringList.create;
try
batFile.Add(process+' > '+ resFileName);
batFile.SaveToFile(batFileName);
finally
batFile.Free;
end;
//・CreateProcessでそのファイルを実行
GetStartupInfo(SI);
SI.dwFlags := STARTF_USESHOWWINDOW;
SI.wShowWindow := SW_HIDE;
//todo:環境変数ComSpecから持ってくるようにすること。
if not CreateProcess(PChar(batFileName), nil, nil, nil,
False, CREATE_DEFAULT_ERROR_MODE,nil, nil,
SI, PI) Then
Raise Exception.Create(batFileName+'を
起動することができませんでした:' + IntToStr(GetLastError));
//起動したプロセスの終了を待って。。。
while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
Application.ProcessMessages;
//ファイルに落とした出力結果を読みとる。
resultFile:=TStringList.create;
try
resultFile.LoadFromFile(resFileName);
result := resultFile.Text;
finally
resultFile.Free;
end;
//・必要が有れば、処理後、そのファイルを削除
DeleteFile(batFileName);
DeleteFile(resFileName);
end;
2000/12/04(Mon) 00:01pm CQK00014 大怪獣もぎゃ
Original document by 大怪獣もぎゃ 氏 ID:(CQK00014)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|