/***********************************************************
標準出力をファイルにリダイレクトしてコンソール・アプリケーションを実行
【2005/10/05 更新】
***********************************************************/
#const TRUE 1
#const NULL 0
/* API登録 */
#uselib "kernel32.dll"
#func CreateFileA "CreateFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#const GENERIC_READ 0x80000000
#const GENERIC_WRITE 0x40000000
#const CREATE_ALWAYS 2
#const INVALID_HANDLE_VALUE -1
#func CloseHandle "CloseHandle" sptr
#func CreateProcessA "CreateProcessA" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func WaitForSingleObject "WaitForSingleObject" sptr,sptr
#const INFINITE 0xFFFFFFFF // WaitForSingleObject待ち時間=無限
/* SECURITY_ATTRIBUTES構造体サイズ */
#const SIZE_SEC_ATTR 12
/* STARTUPINFO構造体パラメータ */
#const SIZE_SUP_INFO 68 // STARTUPINFO構造体サイズ
#const STARTF_USESHOWWINDOW 0x00000001 // パラメータ使用フラグ
#const STARTF_USESTDHANDLES 0x00000100
#const SW_HIDE 0 // 起動時ウィンドウを表示しない
#include "gm_beep.hsp"
/* 出力用ファイル作成 */
secAttr = SIZE_SEC_ATTR, NULL, TRUE // SECURITY_ATTRIBUTES構造体
CreateFileA "out.txt",GENERIC_WRITE,0,varptr(secAttr),CREATE_ALWAYS,0,NULL
hWriteFile = stat
if hWriteFile=INVALID_HANDLE_VALUE {
dialog "ファイルの作成に失敗しました。スクリプトを終了します。",1,"エラー"
end
}
// (スクリプト上ではhWriteFileを使った処理を行わないこと)
/* 標準出力をファイルハンドルに繋いでmes.exeを起動 */
cmdline = "mes.exe test.txt"
supInfo = SIZE_SUP_INFO, NULL, NULL, NULL // STARTUPINFO構造体
supInfo(4) = 0, 0, 0, 0
supInfo(8) = 0, 0, NULL, STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES
supInfo(12) = SW_HIDE, NULL, NULL, hWriteFile, NULL
dim procInfo1,4
CreateProcessA NULL,cmdline,0,0,TRUE,NULL,NULL,NULL,varptr(supInfo),varptr(procInfo1)
result = stat
/* ファイルハンドルを閉じる */
CloseHandle hWriteFile
if result=0 {
dialog "mes.exeの起動に失敗しました。スクリプトを終了します。",1,"エラー"
end
}
/* mes.exeが終了するまで待つ */
WaitForSingleObject procInfo2(0),INFINITE
/* mes.exe関連のハンドルを閉じる */
CloseHandle procInfo1(0)
CloseHandle procInfo1(1)
/* 処理終了の合図 */
beep
end
|