プログラミング工房 > HSP > サンプルスクリプト > 

標準出力をファイルにリダイレクトしてコンソール・アプリケーションを実行

(2008/01/21 追記)

 このページの情報は下記のページの注とあわせて利用してください。


>> ダウンロード  (実行に必要なファイルはすべてアーカイブに含まれています。)

/***********************************************************

	標準出力をファイルにリダイレクトしてコンソール・アプリケーションを実行

		【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