pipe2.hsp

sample\hspext\pipe2.hsp » Plain Format

;	パイプを使用して、コマンドラインを実行するサンプル2
;	mesboxで作成したテキストボックスに進捗を追記します
;
#include "hspext.as"

#define EM_SETSEL $B1
#define EM_REPLACESEL $C2

	cmd="ipconfig /all"		; 実行するコマンド

	sdim editbuf,$10000		; mesboxバッファ
	sdim tmp,$100000		; 一時バッファ(1MB)
	sdim buf,$20000			; 追記バッファ
	sdim addbuf,$4000		; 中間バッファ
	sdim lntmp,$2000		; 行取得バッファ
	sdim ln,$2000			; 行取得バッファ

	mesbox editbuf,640,200,0:obj_edit=stat
	edit_hwnd = objInfo(obj_edit,2)

	pipeexec buf,cmd,1		; 実行開始
	if stat : dialog "実行できませんでした" : end
	mes cmd+" を実行中..."

	repeat
	pipeget ln,1			; 1行ずつ取得する
	if stat=0 : break
	if ln!="" {
		;	取得した行を中間バッファに貯める
		getstr lntmp,ln,0,10
		addbuf+=lntmp+"\n"
		continue
	}
	;	中間バッファを追記する
	if addbuf!="" {
		sendmsg edit_hwnd,EM_EM_SETSEL,0,-1
		sendmsg edit_hwnd,EM_EM_SETSEL,-1,-1
		sendmsg edit_hwnd,EM_REPLACESEL,-1,addbuf
		buf+=addbuf
		addbuf=""
	}
	await 10
	loop

	;	残った中間バッファを追記する
	if addbuf!="" {
		sendmsg edit_hwnd,EM_EM_SETSEL,0,-1
		sendmsg edit_hwnd,EM_EM_SETSEL,-1,-1
		sendmsg edit_hwnd,EM_REPLACESEL,-1,addbuf
		buf+=addbuf
		addbuf=""
	}

	mes "実行を終了しました"
	stop