16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:DOS窓の出力を得る:pipe編"
この発言は #01339 大怪獣もぎゃ さんのDOS窓の出力を得る:batファイル編 に対するコメントです
こっちの方は、Pipeという機能を使ってます。
こっちの方がスマートですが、batファイルを使うと、
DOSコマンドも使えるから私はbatファイルがお好みです^^;
function getLocalUniqueName:string;
//日付と時刻を元に「とりあえずユニークな」名前を生成する。
var
Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
DecodeDate(now,year,month,day);
DecodeTime(now,Hour, Min, Sec, MSec);
result :=
format('~%s%d%d%d%d%d%d%d',
[ChangeFileExt( ExtractFileName(Application.ExeName), '' ),
Year,Month,Day,Hour,Min,Sec,MSec]);
end;
function getTempDir:string;
//Windowsのテンポラリディレクトリ名を返す。
const
MAX_PATH = 255;
var
Buf: array[0..(MAX_PATH - 1)] of Char;
begin
result := '';
if GetTempPath(MAX_PATH, buf) > 0 then result := Buf;
end;
function getProcessResultbyPipe(process:string):string;
const
BUFFER_SIZE = 4000;
var
si: TStartUpInfo;
pi: TProcessInformation;
sa: TSecurityAttributes;
LBuffer: string;
hReadPipe, hWritePipe: THandle;
LSize: Cardinal;
begin
GetStartUpInfo(si);
//ウィンドウの表示・非表示
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
//TSecurityAttributes構造体の設定
sa.nLength := SizeOf(sa);
sa.bInheritHandle := True;
sa.lpSecurityDescriptor := nil;
//匿名パイプの作成
CreatePipe(hReadPipe, hWritePipe, @sa, BUFFER_SIZE);
si.dwFlags := si.dwFlags or STARTF_USESTDHANDLES;
si.hStdOutput := hWritePipe; //標準出力と
//si.hStdError := hWritePipe; //標準エラー
//プログラム起動
if not CreateProcess(PChar(process),nil, nil, nil, True,
0, nil, nil, si, pi) then
begin
Raise Exception.Create(process+'を起動することができませんでした:' +
IntToStr(GetLastError));
end;
//終了待ち
while WaitForSingleObject(pi.hProcess, 100) = WAIT_TIMEOUT do
begin
Sleep(100);
end;
SetLength(LBuffer, BUFFER_SIZE);
CloseHandle(hWritePipe);
ReadFile(hReadPipe, PChar(LBuffer)^, BUFFER_SIZE, LSize, nil);
SetLength(LBuffer, LSize);
result := LBuffer;
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
2001/06/08(Fri) 04:52pm CQK00014 大怪獣もぎゃ
- FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/06/10 -
Original document by 大怪獣もぎゃ 氏 ID:(CQK00014)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|