InformationWSH技術情報ここでは、WSHやVBに関する、技術情報を中心に取り上げていきます。Componentsとは何かHTA(HTMLアプリケーション)についてWSHの誕生と現状WSHはもともとWindowsNTのログオンスクリプトを強化する目的で誕生しました。その後、Win98でバッチファイルより高度なスクリプト環境を提供する目的で採用されました。WSHはまだバッチファイルには勝てません。バッチファイルよりいろいろ記述しないと駄目という点もさることながら、一番の問題点は、バッチファイルのようにファイルをドラッグアンドドロップして引数として読み込めない点でしょう。できないかについては話が長くなるのでやめますが、これは不便です。Windows次期バージョンではこの制限をなんとかしてほしいものです。...と書いたのですが、これはWSH2.0で改善されました。あと、ユーザーインターフェースにもっとバリエーションがほしいところです。現状で利用できるのは、結局のところメッセージボックスとインプットボックス(とコモンダイアログ)だけですから。リスト系のダイアログが使えるといいなあ。VBSやWSHは今でもバージョンアップが続けられているので、これからどう化けるか、じっくりと見守っていきたいと思っています。[↑]WSHとセキュリティWSHで使われる言語(VBSなど)は本来インターネットで使われるものだけに、セキュリティに関してはかなりの配慮がなされています。VBSでいうと、本家VBにあるファイル入出力機能が省略されています。これでは本格的なスクリプトを書くには機能的に不足なので、WSHではWScriptオブジェクトとFileSystemObjectオブジェクトでその機能を補っています。これらはActiveXコントロールの一つなので、IEなどのブラウザではセキュリティ設定により実行を制限できます。逆にセキュリティ設定を甘くして、ActiveXを許可する設定にしておくと、非常にキケンです。(個人的には、ブラウザでActiveXの実行を許可している人の心境がよくわかりません。)また、ActiveX実行を禁止しておいても、VBSファイルへの直接リンクを実行し、WSHでスクリプトが実行されれば、ActiveXもばっちり呼び出されてしまいます。(まあこの種の危険性はVBSファイルだけに限らず、ワードなどのドキュメントファイルにも言えるのですが)。exeファイルはブラウザから直接実行できないようになっていますが、VBSファイルでは実行が可能になっているのです。ここにあるスクリプトもダウンロードして解凍していきなり実行させずに、まずテキストエディタで開き、何をするスクリプトか確認してから実行するくらいの慎重さは必要だと思います。(別に変なスクリプトは書いてないつもりですが)[↑]VBSのバージョンとホストプログラムのバージョンについてVBSのランゲージリファレンスを開くと、一番上に「バージョン情報」というリンクがあります。ここをクリックしてみると、ホストアプリケーションとサポートしているVBSのバージョンが書かれた表が出てきます。これを見ているとVBSは新しいソフトが出る度に、バージョンアップしているのがわかります。ver.1.0が搭載されていましたが、IE4ではver.3.0が、VB6にはver.4.0、IE5.0にはver5.0という具合です。ところで、WSHにはどのバージョンのVBSが搭載されているのでしょうか。ver.3.0が搭載されていることがわかりますが、IE5.0をインストールすると、WSHのバージョンは1.0のままですがVBSのバージョンは5.0になります。ScriptEngineMajorVersion関数、ScriptEngineMinorVersion関数、ScriptEngineBuildVersion関数を用いると、利用しているVBSのバージョンがわかります。VBSver.5.0では正規表現など、新しい要素が付加されているので、ぜひ最新版をインストールしておきましょう。Script5.0に含まれています。)ちなみに、Wscript.VersionでWSHのバージョンが取得できますが、このバージョンはwscript.exeのファイルバージョンであるので、Win98付属のものもIE5付属のものも同じ値(5.0)になります。WSH2.0のバージョンは5.1になります。[↑]PerlでWSHWSHでは、基本的にVBSとJScriptでコードを書くわけですが、そのほかにもPerlでも記述することができるようです。方法としては、ActiveState社がフリーで提供している、ActivePerlを使います。対応したPerlなので、これをインストールすれば、PerlScriptでWSH用のスクリプトが記述できるようになります。私はPerlを知らないのでまだインストールしていませんが、インストールしたらまた詳しくレポートしてみたいと思います(^^;[↑]VBSとVBの違いVBSはVBスクリプトのことですが、そもそもVBとは何かについて今まで説明していませんでしたね。そこで今回は、VBを簡単に紹介して、VBSとの相違点についてふれたいと思います。Basicの略で、Windows用のアプリケーションを開発するためのプログラム言語です。6.0が発売されています。VBは、その名の通り、Visualな環境でプログラミングが可能で、基本的にボタンや、テキストボックス、チェックボックスといったコントロールをフォーム(ウィンドウ)に配置し、それらのコントロールに対するコードを記述する形式になっています。C++等と比べて初心者にもわかりやすく、その一方で商用アプリの開発環境としても採用されるほどのパワフルな言語と言えます。VBで作られたアプリを動作させるには、VBランタイムと呼ばれるDLLファイルが必要になります。このランタイムをロードするため、VBアプリは起動が若干遅いというデメリットもあります。VBAはVBの開発環境をほぼそのまま継承したもので、VBのもつ多彩な機能を使ってマクロを記述することができます。Officeに搭載されています。基本的にボタンや、テキストボックス、チェックボックスといったコントロールを単独では持たず、ホストアプリケーションを介して利用することになります。VBSはWebページのインタラクティブ性を向上させる言語としてHTML中で用いられ、あるいはWSHから利用し、バッチファイルよりも高度なスクリプトとして用いられています。VBSではVBやVBAの持っている機能のうち、いくつかが省かれています。逆にVBSにはあるが、VB・VBAにはない機能というのもあります。これについてはVBSのランゲージリファレンスに詳しい一覧表がありますので、ここでは述べません。解説済みの事柄と若干重複が見られますが、VBとVBSについてまとめてみました。間違いも含まれているでしょうが、つっこまないでください(^^;[↑]ActiveXオブジェクトの仕様を知る方法WSHの一つの特長として、ActiveXコントロールを利用できる点が挙げられます。ActiveXオブジェクトのメソッド・プロパティがわからないと事実上使用することができません。Laboratoryでは、「WSHで使えるオブジェクトの解説」のページでいくつかのオブジェクトのメソッド・プロパティを紹介していますが、この情報はそもそもどうやって知ることができるのか、ここで種明かしをしたいと思います。それはVBの「オブジェクトブラウザ」を使う方法です。これはまさにオブジェクトにどんなメソッドやプロパティがあるかを知るためのツールです。使い方は、VBのメイン画面でF2を押し起動させ、「オブジェクトブラウザ」のダイアログで右クリックし、「参照設定」を選び、知りたいオブジェクトを選ぶだけです。このツールはVBAにも付属していますので、VBもしくはOfficeをお持ちの方は、この方法で調べることができます。いえ、このツールで得られる情報はメソッドやプロパティの名前とごく簡単な説明だけですので、実際には使ってみないとわからないことが多々あります。Viewerを使用する方法もあります。Libraries"を展開してみてください。インストールされているActiveXコントロールが表示されると思います。使いたいコントロールをダブルクリックすると、別ウィンドウにその仕様が表示されます。このツールは英語版である上、VBSライクな記述ではないので、使いこなすのは大変かもしれません。(私にもよくわかりません)あとCreateObjectメソッドで、引数には基本的に"InternetExplorer.Application"のように「オブジェクトを提供しているアプリケーションの名前.作成するオブジェクトの種類」を指定しますが、これに加えて数字を指定しないとオブジェクトが取得できない場合があります。その場合、原始的ですがレジストリエディタを立ち上げ、まず基本となる文字列(ここではInternetExplorer.Application)を検索すると、HKEY_CLASSES_ROOT\InternetExplorer.Application.1というキーが見つかるので、Wacript.CreateObject("InternetExplorer.Application.1")とすればいいことがわかります。この場合はHKEY_CLASSES_ROOT\InternetExplorer.Applicationというキーもあるので、Wscript.CreateObject("InternetExplorer.Application")でもOKです。#この数字の意味、実はよくわかってません。[↑]VBSで正規表現を使うVBSの最新バージョン(5.0)では、正規表現が利用できるようになりました。Expression)とは、特殊なパターンと呼ばれる文字列を指定することで、指定したテキストに対して検索・置換をおこなうものです。VBSではRegExpオブジェクトが正規表現の機能を提供しています。正規表現は、非常に強力な検索手段で、現在でも様々なアプリケーションがそなえもつ機能なので、覚えていて決して損はありません。Windows2000のファイル検索や、一太郎Light2などでも新規に採用されるそうです。UNIX系OSを使用するための必須科目といえるかもしれません。いつか「VBS講座」で解説してみたいと思います(いや、その前に私自身が正規表現を覚えねば)。一応VBSランゲージリファレンスの、「RegExpオブジェクト」の、「Patternプロパティ」の項目に、正規表現のパターンの説明があるので、参考にしてみてください。[↑]WSHの原理に迫る今までWSHの原理について正直、あまり深く考えたことがなかったのですが、ご要望があったので今回ちょっと勉強してみることにしました。いえ、WSHの原理は非常に難解で、私など雑誌の解説記事を見てもなかなか理解できませんでした。今回は、中間報告と言うことで、理解できた範囲だけ述べたいと思います。この項目に関しては正しさをいっさい保証しませんのであしからずご了承ください...。Scriptingによってスクリプティングエンジンをホスティングしている」となります(と雑誌<ASCII>に書いてあった。この文章を書いたのはMicrosoftのWSH開発担当者)。この一文に含まれる専門用語を読み解いていきましょう。COMとは、Windowsのアプリケーション・ダイナミックリンクライブラリ(Explorer,IE,Word,Excel,ファイルシステムのDLLファイルなど)を、様々な機能を持った部品(コンポーネント)から構築するシステムのことで、これらのコンポーネントの持つ機能は他のアプリからも呼び出して利用することができます。オートメーションです。オートメーションコントローラの一つなのです。(ActiveXコントロールとはインターネット用にOLEコントロールのサイズを小さくしたものです。間を取り持つ働きをするものです。OLEインターフェースによりインタプリタの機能のみをスクリプティングホストに提供しているため、そのスクリプティングエンジンの言語に関わらず同じ動作を実現します。Scriptingの仕様は公開されており、MS以外のデベロッパが新しいスクリプティングエンジンを開発することができます。上で述べた、PerlScriptもその一つのようです。Scriptingに従ってVBScriptかJScriptのスクリプティングエンジンを呼び出す一方、オートメーションコントローラーとして、各アプリケーションの機能を提供するActiveXコントロールを制御していることになります。WSH自体がCOM化されているので、この機能(たとえばレジストリアクセス等)は、他のアプリ(たとえばWordのマクロ、IEのスクリプトなど)から呼び出すこともできます。WSH自体はIEのようにドキュメントコンテナとしての機能は持っていません。WSHは寡黙ですが、裏では結構複雑な処理をやっているんですねえ。別ページにまとめました。1999年11月に、正式版がリリースされました。[↑]スクリプトをエンコードするVBSファイルやJSファイルは、シンプルなテキストファイルですが、これをエンコードし、バイナリファイルに変換する方法があります。Encoder"というツールを用います。このツールはここでダウンロードできます(左のツリービューからVBScript→ダウンロードを開いてください)。このツールは、そもそもHTMLに記述するスクリプト、もしくはWSHでのログオンスクリプトをバイナリに変換することで、ページを訪れる人・ログオンする人にそのスクリプトの内容を見られないようにするという目的があるようで、結構陰湿なツールかもしれません(エンコードしたスクリプトがあるようなサイトは怖くて見に行けませんね)。改竄抑制にもなるそうですが、はたして?しかし、個人でローカルに使うVBSやJSをエンコードすると結構楽しいです。容量は増えるし、動作速度が速くなるわけでもないのですが。この楽しさがわかる人だけ使うといいでしょう。a.vbeのようにします。出力されたa.vbeというファイルがエンコードされたファイルです。これをダブルクリックすると、vbsファイルと同じように実行されます。Encoderにはオプションスイッチがいくつかありますが、それはヘルプをご覧ください。*.jsなら*.jseにします。5.0がインストールされていない環境では、vbeファイルが実行できないようなので、インストールしてください。Componentsは、簡単にいうと、VBSやJSで、再利用可能なActiveXコントロール(COMコンポーネント)を作ろうというものです。サーバースクリプトレットともいいます。実際にはXMLフォーマットのWSCファイルを作成します。このWSCファイルには、VBSやJSのコードを書き、プロパティ・メソッド・イベント・定数・オブジェクトID、クラスIDなどを定義します。他のCOMコンポーネントをインクルードすることも可能です。このファイルを実行することで、タイプライブラリを生成し、コンポーネントとしてシステムに登録することができます。Explorer、VBA、などから利用することができます。具体的には他のActiveXコントロールと同様に、CreateObject関数/メソッドで呼び出します。Script5.0以上に付属しています。このトピックに関する内容の正しさは、例によって保証できませんのであしからず。詳しく知りたい方は、MSのページをどうぞ。リファレンスなどがあります。HTML)とスクリプト(VBScript/JScript)・各種ActiveXコントロールを使って作成するアプリケーションの一種です。Explorer5.0をインストールすると、Systemフォルダにmshta.exeというファイルが導入されますが、これがHTMLアプリケーション(.hta)を実行させるホストプログラムです。HTAは、基本的にはHTML4.0準拠のHTMLなので、テキストエディタで作成することができます。.htaファイルをmshta.exeで動作させると、.htmをIEに読み込ませたときのように、メニュー、ツールバー、ステータスバーなどが表示されず、VBでいうところの「フォーム」のような余計なものが何もついていないウィンドウにHTMLが表示されます。このウィンドウの外観などは、.htaファイルの<head>内に、hta:applicationタグという.hta固有のタグに記述することによって変更することができます。これは、VBのフォームのプロパティを設定するのと同様です。hta:applicationタグについては、kiaさんのページ、あるいはMSのページ(日本語概要)(英語リファレンス)を参照してください。HTAのもっとも強力な機能は、ActiveXを何の制限もなく利用できることです。objectタグでActiveXコントロールを埋め込んだもの、あるいはスクリプトからCreateObject関数でActiveXオブジェクトの機能呼び出している、通常のHTMLをIEに読み込ませると、デフォルトのセキュリティ設定では、警告のダイアログが表示されたり、まったく実行が不可になってしまいます。ローカルのHTMLファイルに関しては、通常の方法ではセキュリティのカスタマイズができないため、必ず警告が表示されてしまいます。いうのも、ActiveXはそれだけ強力であり、インターネットに存在するHTMLファイルから、ローカルのファイルに何の制限もなくアクセスできるという危険性があるため、こういったセキュリティ機能が備わっているわけです。HTAは、普通のアプリケーションと同様、基本的にローカルのファイルを実行させるものなので、こういったセキュリティは働かなくなっています。そのため、従来の.htmファイル+IEでは事実上不可能だった、HTMLでのアプリケーション作成が実現したわけです。ActiveXオブジェクトは、WshShellやWshNetwork、FileSystemObjectなどがあり、WSHからとほぼ同様に利用することができます(注意:WscriptオブジェクトはWSHの組み込みオブジェクトなので、HTAからは利用できない)。WSHでは利用できなかった、HTMLにobjectタグで埋め込むActiveXコントロールも利用できます。このツールは、本来HTMLにActiveXコントロールを配置し、スクリプトを記述するためのエディタですが、HTA作成にも威力を発揮します。このツールはかなり昔からバージョンアップがされておらず、最新のIE・OSでは一部の動作が不安定です。ダウンロードはこちら。これは英語版で、日本語版OSにインストールするには、さらに追加コンポーネントのインストールが必要です。HTMLの知識も必要になるでしょう。DynamicHTMLでは、HTMLのドキュメントやウィンドウ、タグなどをそれぞれ「オブジェクト」として扱います。<A>タグは、Aオブジェクトとして扱われ、href(リンク先)というプロパティや、OnClick(クリックしたとき)というイベントがあります。このようなオブジェクトに対する、プロパティ・メソッド・イベントを、<script>タグ内に、VBScript/JScriptで記述することで動的なHTMLを実現するのです。DHTMLについては、MSのページのリファレンス(英語です。日本語のページは何処に?)や、他のサイトを参照してください。HTAでも、画像ファイルやスタイルシートなどを使って、見た目を華やかに彩ることも可能です。表現能力に関しては、普通のHTMLと何ら変わりありません。このように様々な強力な機能を持っているだけに、「HTAがあるならWSHはもう必要ないのでは?」と思われる方もいらっしゃるかもしれませんが、そうではありません。HTAは、ウィンドウのインターフェースを持つという、WSHにはない利点がありますが、逆にWSHはこういったインターフェースがInputBox、MsgBox程度しかなく、バッチ的な処理に向いています。HTAとWSHは目的に応じて使い分けていくのがよいと思われます。Microsoftは、HTMLを一つの開発言語としてとらえているようです。Explorer4.0の登場により、Windowsのシェルがブラウザと統合され、フォルダやデスクトップがHTMLで記述できるようになりました。Component?)という技術もあるそうです)。IE5.0によって、ActiveX+DHTMLでアプリケーションを作成する、HTAが登場しました。Neptuneでは、HTMLから直接Win32APIにアクセスできるようになるようです。これによって真の意味で、HTMLが開発言語の一つになると思われます。このように、HTMLは21世紀になってもその重要性をますます高めていくことになるのは必至です。将来を見据えて、今からDHTMLやHTAの勉強をするのも悪くないと思います。ところで、私もいくつかHTAを作成しています。「ダウンロード」のページでダウンロードできるようになっているので、是非参考にしてみてください。私自身、あまりよくわかっていないので、ところどころ「?」な記述があると思いますが(^^;[↑]Home。