HTMLに動的な要素を加えたのがJavaScriptです。1995年に
Netscape が、Sun と共同で開発しました。Microsoft は、JavaScriptと同等な機能をVisual Basic を元に開発し、VBScript として1997 年のWin98で世に送り出しました。ブラウザの後発会社であった事情で、JavaScripコンパテイブルのJScriptを同時に公開しました。 COM(Componet Object Model)インターフェースを基盤として、マルチタスクOSであるWindowsは、その時大きく変貌していた。アプリケーション間通信を実現したWindowsOSは、アプリケーションとOSの境界を限りなく低いものとし、さらに、オブジェクトモデルをスクリプトで操るスクリプトワールドを提供しました。 出発点の事情により、ページ記述言語JavaScriptはスクリプト言語として、OSの操作、アプリケーションのカスタマイズに深く関係することになった。本来、ローカルPCのファイルアクセスを 制限した設計であったJavaScriptは、MicrosoftMicrosoftOS上ではScripting.FileSystemObjectを利用できる。利用に際しては、セキュリテイ上の理解と配慮が必要となる。 プレゼンテーションという観点から、インターネットのHTMLは避けて通れない。 エンジニアとして、報告書の作成と計算アプリケーションの両面からJavaScript(正式にはJScript)は、限りない武器といえる。EXCEL、AutoCAD,Webページを自由に操れると、どんな世界がひらけるのだろう。 こような観点に立って、MicrosoftWindowsスクリプトワールドの指令塔、WindowsScriptHost、WSCRIPT.EXEを見てみよう。 |
IE6をインストールすると、C:\WINDOWS\wscript.exeがインストールされているはずだ。これが、WindowsScriptHostの実体。 javaScriptで記述した手順のページを拡張子JSで保存すれば、そのファイルをダブルクリックで自動実行できます。Windows版バッチファイルです。 拡張子JSのスクリプトファイルがダブルクリックされると、関連づけに従ってwscript.exe(スクリプティングホスト)に渡されJScriptエンジンを呼び出す。同時に、オートメーションコントローラーとして、ActiveXコントロールを制御する。 このスクリプトワールドのオブジェクト階層構造はつきのようである。 ![]() Windows Scripting Hostは、メッセージを画面に出力したり、CreateObject や GetObject でCOM機能をスクリプトに提供する。つまり、各オブジェクトのプロパティとメソッドを操作する環境を提供する。 wscript.exe自体がCOM化されているので、WSHの機能は、他のアプリケーション,たとえばEXCELから呼び出すこともできる。逆に、ActiveXコントロールを提供するEXCELを操作することもできます。 wscript.exe単独で提供するオブジェクトは、上のオブジェクト体系のWscript(ルートオブジェクト)だけである。その子供のArguments、その子供のNamed,UnNamedは管轄外のようだ。 |
WScriptオブジェクト自体のメソッドとプロパティは次のようなものがある。
「メモ帳」に上のように打ち込み、JSの拡張子で保存する。そしてダブルクリック。 ![]() 1行目インタラクテイブモードに設定。 2行目スクリプトホストの名前とバージョンの表示。 3行目スクリプトホストのある場所の表示。 4行目実行中のスクリプトの名前とファイルのある場所の表示。 5〜9行目引数の表示。 10行目 プロセスを終了させる。 ダブルクリックの結果、小さなメッセージボックスが開き、OKをクリックで3枚表示する。コマンドに引数がないので5〜9行目の表示をしなくなる。 1行目のtrueをfalseにして実行すると、何も表示をしない。 バッチモードでスクリプトを実行したことになるが、出力は無効状態になる。 ただこれだけの機能だが、ActiveXの司令塔の能力は大きい。例えば、OSのShell機能を利用して「メモ帳」を自動実行できる。 |
DOS窓からnotopadと打ち込むと「メモ帳」が起動する。そのウインドウをアクティブにすると 、キーボードの入力はそのアプリケーションに反映する。これをスクリプトに記述したのが、上のコード。あるウインドウをアクテイブにするAppActivateメソッドと、キーストロークを送信するSendKeysメソッドを使つている。 WScript.CreateObject("WScript.Shell")により、ShellすなわちDOS窓がCOM化されて、スクリプトで操作できるようになった。CreateObjectはCOMインターフェースを持つオブジェクトを有効にする魔法使いとも言える。 |
ExcelはActiveXObject製品の代表選手。WSHなしでコントロール可能だ。
WSHでShellをCOM化すると、そのExcelにキーボード入力が送れる。
1、2行目、Application オブジェクトとしてExcel生成。表示させる。 3行目、Sheet オブジェクトをExcelSheetに割り当てる 4行目、シートの先頭のセルに文字を入力 5行目、シートのC3セルに文字を入力 6行目、Shellオブジェクトを生成 7〜13行目、SendKeysメソッドでアクテイブセルに文字入力 14行目、メッセージボックスで確認 15行目、プロセスの終了 Excelは、VBAで木目細かなコントロールができる。Excelだけなら十分だが、Excel以外からのコントロールにはWSHが役立つこともある。 同様なことが、Microsoftの製品ではできる。この場合のApplication名は下記のようだ。
|
Shell.applicationとはexplorerのこと。GUIベースのShell。
1行目、Application オブジェクトとしてのShell生成。(Shell.Visible = trueはエラーとなる) 2行目、Shell.Windows()をWinsに割り当てる 3行目、Shell.Windowsの数を確認 4、5行目、Application オブジェクトとしてInternetExplorer生成。表示する。 6行目、Shell.Windowsの数を確認 7〜12行目、各Windowのフルネームを確認 13〜21行目、ieとexplorer\のWindowsの数で確認 22行目、IEを終了 23行目、Shellを閉じる ieとexplorerはShell統合されたことを確認してみた。 さて、wscript.exeとはここで別れる。DOS窓で CScript.exe //H:CScript と打ち込む。以後スクリプトホストはC:\WINDOWS\COMMANDのcscript.exeが規定値として務める。 標準出力は小さなメッセージボックスからDOS窓の画面に変わる。 ArgumentsオブジェクトとStdOut StdIn StdErrが有効になる。 |