第3回 HTAでコマンドライン・プログラムをビジュアルにする
最初に触ったパソコンがWindowsマシンという世代の人は,コマンドラインの操作に慣れていないようです。じゃあどうするか。簡単なことです。使いにくいなら使いやすくしちゃえばいいんです。コマンドライン・プログラムをウインドウ・プログラムにしちゃいましょう。 今回ご紹介するアイデアは,文字だけのコンソール・プログラムに“ガワ”を付けて「ウィンドウ・プログラムに見せてしまえ」というものです。 pingを使えば
|
|
<html><head> <title>サンプル・プログラム</title></head> <body> <form name="form1"> <p>IPアドレスまたはサーバー名 <input type="text" name="ipaddr" value="127.0.0.1" /></p> <p>リクエスト・データ送信回数 <input type="radio" name="rd" />1 <input type="radio" name="rd" checked />2 <input type="radio" name="rd" />3 送信パケットサイズ <select name="pacsize"> <option value="16">16 <option value="32">32 <option value="64">64 </select> bytes </p> <p><input type="button" value="ping 実行" onClick="go_ping()" /></p> <textarea name="kekka" cols="80" rows="30"></textarea> <p><input type="reset" value="入力内容の初期化"></p> </form> <script language="VBScript"> Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Sub go_ping() For i = 0 To document.form1.rd.length - 1 if document.form1.rd(i).checked then loops = i + 1 end if Next pacsize = document.form1.pacsize.value exCommand = "ping" & " " & document.form1.ipaddr.value exCommand = exCommand & " " & "-n" & " " & loops exCommand = exCommand & " " & "-l" & " " & pacsize Set oExec = WshShell.Exec(exCommand) R = oExec.Stdout.ReadAll document.form1.kekka.value = R End Sub </script> </body></html> |
まずは(1)の部分に注目してください。ボタンをクリックすると go_ping( ) というSubプロシジャを呼び出します。このプロシジャが今回のプログラムのすべてで,HTMLのフォーム上にある各コントロールの状態や,入力されている文字列をもらってきます。コントロールをVBScriptから参照するには,(3)のように「document.フォーム名.コントロール名.プロパティ」と記述します。
pingプログラムを実行するには,(2)のようにWScript.Shellというオブジェクト(サンプルではWshShellと命名)が必要です。(4)のように「Set オブジェクト名 = WshShell.Exec("実行ファイル名")」とすると指定された実行ファイルを実行します。
オブジェクト名の部分はリスト1ではoExec,実行ファイル名の部分がexCommandという変数になっていますが,これはpingのオプションをフォーム上の各コントロールの設定で組み立て直しているためです。生成されるexCommandは「ping -n 3 -l 32」 のような文字列になります。
次が今回最大のポイントです。コマンドライン・プログラムが吐き出した実行結果は,(5)の「文字列変数 = oExec.Stdout.ReadAll」の行で文字列として取得します。リスト1では,Rという変数で受け取って,それをフォーム上の<textarea>タグに表示させています。Stdoutというのは標準出力を指しています。つまりコマンドプロンプトの画面そのものと考えてください。コマンドプロンプトへの出力内容(のデータ)を,ReadAllというメソッドで,スクリプトが奪い取ったわけです。
では,リスト1のコードをメモ帳などのテキスト・エディタで入力し,ping.htaのような名前で保存したらダブルクリックして実行してみてください。図1[拡大表示]のような画面が表示されるはずです。値を設定して「ping 実行」ボタンをクリックしてみましょう。pingはコマンドライン・プログラムなので,起動時にしばらくコマンドプロンプトが画面上に出てきますが,処理が終わると勝手に閉じます。どうです?それっぽいウィンドウ・プログラムになったでしょ?