UWSCでコマンドプロンプト
UWSCでコマンドプロンプトの入出力を制御するモジュールを作ってみた。
画面がびかびかするが、上手いやり方がわからん、、、。
びかびか抑止方法を教えて頂いたので、スクリプトを改定。
ただ単純に標準入出力を扱いたいなら、別な方法を推奨。
UWSCで標準入出力制御 - じゅんじゅんのきまぐれ
なんせ、以下の方法はクリップボード経由というダサさですから。
Cmd.uws
OPTION EXPLICIT IFB GET_UWSC_NAME="Cmd.uws" THEN DIM wid = GETID("","ConsoleWindowClass") Cmd.SendString(wid, "for /l %i in (1,1,5) do @ping -n 2 www.yahoo.co.jp<#CR>") DIM text WHILE TRUE text = Cmd.GetNewText(wid) IF LENGTH(text) THEN PRINT text SLEEP(3) WEND ENDIF MODULE Cmd DEF_DLL SendMessageA(Hwnd,Long,Long,Dword):Long:user32 DIM _getNewText = "" // GetNewTextで使用 CONST WM_COMMAND = $111 PROCEDURE SendString(wid, msg) SENDSTR(0, msg) //SCKEY(wid, VK_ALT, VK_SPACE, E, P) DIM hwnd = IDTOHND(wid) // ペースト SendMessageA(hwnd, WM_COMMAND, 65521, 0) FEND FUNCTION GetAllText(wid) //SCKEY(wid, VK_ALT, VK_SPACE, E, S) //SCKEY(wid, VK_ALT, VK_SPACE, E, Y) DIM hwnd = IDTOHND(wid) // 全選択 SendMessageA(hwnd, WM_COMMAND, 65525, 0) // コピー SendMessageA(hwnd, WM_COMMAND, 65520, 0) RESULT = GETSTR(0) FEND FUNCTION GetNewText(wid) DIM newText = GetAllText(wid) DIM ret = newText DIM l = LENGTH(_getNewText) IFB l > 0 THEN DIM i = POS(_getNewText, newText) IFB i = 1 THEN // 先頭を切り落とすだけ ret = COPY(newText, l + 1) ELSEIF i > 1 THEN // 途中から切り落とす ret = COPY(newText, i + l) ELSE // TODO: 流れた場合が未考慮 ENDIF ENDIF _getNewText = newText RESULT = ret FEND ENDMODULE