jsi.jsに手を加えてみたり。2008年10月20日 04時33分42秒

最近なんだかネタになるようなスクリプトとか書いてる時間がぜんぜんなくてネタにこまったのでjsi.jsに手を入れてみた。

といっても、コードの修正とかは結構前にやっていたもので、どちらかというと蔵出し的な感じ。ほんとにネタに困ってるんだってば。

手を入れたところは細かいバグ修正とライブラリの追加。zipは固めなおしてリビジョンあげたので、以下からダウンロードしてください。

サンプルのライブラリ設定ファイルとして、付属ライブラリをすべてロードする設定で「libsettings.sample」を添付しているので、これを「libsettings」とリネーム、適当に編集して使ってください。

jsi.jsの変更内容

こんな感じ。

  • ドットコマンドの引数展開バグの修正
  • ライブラリロード中の例外発生時に、ロード中ライブラリファイル名も表示するよう改善
  • ドットコマンド「.wmi」を追加
    • → 後述の追加ライブラリ「wmi_console.js」を必要とします。注意。

追加ライブラリ・vbscript.js

かなり前のネタになるが、VBScriptラッパーをライブラリに追加。細かい使い方はリンク先を見てもらうとして、いくつか組み込みメソッドを提供しているのでちょろっと使えるかも。ま、こっちの記事ですでに紹介してるやつなんですが。

getTypeNameメソッド

VBSのTypeName関数のラッパーです。引数に渡したオブジェクトのCOMオブジェクト型を返します。こんな感じ。

jsi > var vb = new VBScript;
--> (undefined)

jsi > vb.getTypeName(new ActiveXObject("Scripting.FileSystemObject"));
--> FileSystemObject

jsi >

promptメソッド

VBSのInputBox関数のラッパー。ブラウザのprompt()感覚で使える。かな。

引数は2つ渡すことが可能で、第一引数にはダイアログメッセージ、第二引数にダイアログタイトルを指定できます。んで、入力された文字列か、キャンセルされた場合はnull(正確にはundefined)が返ります。

jsi > vb.prompt(); // ここでInputBoxが表示される。キャンセルしたとすると...
--> (undefined)

jsi > vb.prompt(); // こんどは'hoge'とでも入れてみると...
--> hoge

jsi >

yesNoメソッド

VBSのMsgBoxラッパーで、vbYesNo定数を渡して[はい][いいえ]の2択処理をします。引数はpromptメソッドと同じくダイアログメッセージとタイトルです。戻り値はvbYes定数(=6)かvbNo定数(=7)が返ります。もう一層ラッパーかぶせてconfirmっぽくしてもよいかも。

jsi > vb.yesNo(); // [はい]クリック
--> 6

jsi > vb.yesNo(); // こんどは[いいえ]クリック
--> 7

jsi >

getNothingとgetEmpty

まず役立つ局面はそうはないだろうけど、VBSでのNothingを取得するgetNothingメソッドもつけてます。JS上ではnullとして扱われますが、getTypeName()を通すとNothingであることが確認できます。それだけですが...

jsi > vb.getNothing();
--> (null)

jsi > vb.getTypeName(vb.getNothing());
--> Nothing

jsi > vb.getTypeName(null);
--> Null // JSのnullはNull

あと、ほとんど意味ないんですが、getEmpty()もつけてみました。VBSのEmptyを取得します。が、これ、JSのundefinedと同じなのよね。サンプル省略。

追加ライブラリ・wmi_console.js

WMIへアクセスするためのライブラリ+WQLを実行するコンソール機能を提供します。詳しい解説はそのうち書きますが、とりあえず追加のドットコマンド「.wmi」を実行してみてください。

jsi > .wmi

WMI Console for jsi.js
server: localhost, root: root/cimv2

wmi@localhost >

プロンプトがこのように変わります。この状態でWQLを入力してみます。
wmi@localhost > select name, creationdate from win32_process;
{
        "CreationDate" : null,
        "Handle" : "0",
        "Name" : "System Idle Process"
}
 :
 :
{
        "CreationDate" : "2008/10/20 03:33:09",
        "Handle" : "10008",
        "Name" : "sakura.exe"
}
{
        "CreationDate" : "2008/10/20 04:28:48",
        "Handle" : "9224",
        "Name" : "wmiprvse.exe"
}
wmi@localhost >

こんな感じでWQLの実行結果が表示されます。元のJSシェルに戻るには.quitしてください。

思ったより記事が長くなっちゃったので、この.wmiコマンドとライブラリ自体の説明はまた後日。