// コンソールアプリケーションを起動して標準出力をファイルにリダ
// イレクトさせる例
// 実行するコンソールアプリケーションのフルパスとリダイレクトの
// 出力先フルパス名
// 実際にはファイル参照で設定する等の工夫をして下さい
const
//AppNameは'Program Files'のようにパス中に空白を含むと起動に
//失敗します。また'"'で括ってもうまくいきません。
//この問題を回避するためには8.3形式のパスに変換することが必要
//と思われます。
AppName = 'C:\xdoc2txt\xdoc2txt.exe';
OutName = 'C:\Test.txt';
// CreateProcessに渡すコマンド
type
Commd = record
App,
Param: string;
end;
// 環境に応じたコマンドをセットする
// 95/98系とNT系ではコマンドのセットの仕方が異なります
function SetCommand: Commd;
var
Version:TOSVERSIONINFO;
sysdir: array[0..260] of char;
begin
Version.dwOSVersionInfoSize := SizeOf(Version);
if GetVersionEx(Version) then
case Version.dwPlatformId of
// Windows95/98
VER_PLATFORM_WIN32_WINDOWS:
begin
// 95系の場合は全てコマンドラインパラメータで指定
Result.App := '';
Result.Param := 'COMMAND.COM /C ';
end;
// WindowsNT/2000/XP
VER_PLATFORM_WIN32_NT:
begin
GetSystemDirectory(sysdir, 260);
// NT系の場合はアプリケーション名にC:\WINNT\SYSTEM32\CMD.EXE等
// とフルパスで指定し、コマンドラインにはCMD.EXEのオプション
// スイッチ(/C)から指定
Result.App := sysdir +'\CMD.EXE';
Result.Param := '/C ';
end;
end;
end;
// コンソールアプリケーションの起動
procedure AppExec(FileName: string);
var
SI: TStartupInfo;
PI: TProcessInformation;
prm: string;
papp: PChar;
cmd: Commd;
begin
cmd := SetCommand;
// コマンドライン作成
prm := cmd.Param + AppName
+ ' "' + FileName + '" > "' + OutName + '"';
if cmd.App = '' then
papp := nil
else
papp := PChar(cmd.App);
GetStartupInfo(SI);
// コンソール(DOS窓)を隠した状態で起動する
SI.wShowWindow := SW_HIDE;
if not CreateProcess(papp,
PChar(prm),
nil, nil, False, CREATE_DEFAULT_ERROR_MODE,
nil, nil, SI, PI)
then
Exit;
// アプリケーションの終了待ち
while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
Application.ProcessMessages;
end;
サンプルプロジェクトのダウンロード(2,145byte)