Kuroda Software Service
JScriptでHelloWorld
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

JScriptでHelloWorld

JScriptによるHelloWorldプログラミング

● HTMLには外観だけを記述します。

HTABOXコアプログラミングの場合、HTMLはユーザーが操作するコントロールが定義されているだけで十分です。HTABOXコアで実行するスクリプトから、コントロールを簡単に認識できるように一意なIDを付けると便利です。このボタンがひとつだけのHTMLファイルは、サンプルフォルダにButton.htmとして存在します。

<html>

<head>

<hta:application icon="icon.ico">

<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<title>Button</title>

</head>

<body>

<input type="button" value="Button" ID="Button1">

</body>

</html>

● 下記ソースコードはサ、ンプルフォルダにHello.jsとして存在します。

var WIN32;

//#define WIN32 //

WIN32 = new ActiveXObject("HTABOX.Application");

WIN32.ScriptFullName = WSH.ScriptFullName;

//#undef WIN32

var DIR  = WIN32.GetScriptDirectory();

var HTA  = WIN32.CreateHtaWindow(DIR + "\\button.htm");

var SCR  = HTA.Script;

var HWND = HTA.FraHwnd;

function hello()

{

    SCR.alert("Hello World");

}

SCR.Button1.onclick = hello;

HTA.Show(); WIN32.WiteForWindowVisible(HWND);

WIN32.MsgBox("正常終了");

● Hello.jsの解説

この10行程度のソースコードは、HTABOXコアがHTMLアプリケーションをどう扱うかを示しています。このソースコードについて理解することは大変重要です。

実行環境の差を吸収する#define命令

var WIN32;

//#define WIN32 //

WIN32 = new ActiveXObject("HTABOX.Application");

WIN32.ScriptFullName = WSH.ScriptFullName;

//#undef WIN32

var DIR  = WIN32.GetScriptDirectory();

内部環境とWSH環境で生じる相違についての一覧

 

内部環境

WSH環境

WScriptオブジェクト

存在しません

存在します

スクリプトのパス

EXEのパス

WSH.ScriptFullName

WIN32オブジェクト

存在します

ActiveXObjectで取得

冒頭で宣言されているWIN32オブジェクトは、HTABOXが実行スクリプトに提供するDispatchExオブジェクトです。内部環境では、WIN32オブジェクトが自動的に提供されますが、WSH環境ではHTABOX.EXEから取得する必要があります。また、内部実行では、カレントディレクトリをHTABOX.EXEがあるフォルダとしますが、WSH環境ではスクリプトファイルがあるフォルダとしなければなりません。

この問題を解決するために、プリプロセッサ命令#defineを導入しました。コメント中の#define命令は、WSH環境ではそのままコメントですが、内部環境では第1オペランドを第2オペランドへ置き換えるプリプロセス命令として機能します。したがって#undefまでの間にあるWINM32という文字は、//に置き換えられ、無害なコメントに置き換わります。尚、現在の仕様では、#defineに対応する#undefが必須となっていますので注意してください。

WIN32.GetScriptDirectory関数は、実行中スクリプトの存在するディレクトリパスを返しますが、WSH環境ではWIN32.ScriptFullName = WSH.ScriptFullName;で、事前に実行スクリプトのパスをWIN32オブジェクトへ報告する必要があることに注意してください。

HTMLアプリケーションインスタンスの生成

var HTA  = WIN32.CreateHtaWindow(DIR + "\\button.htm");

var SCR  = HTA.Script;

var HWND = HTA.FraHwnd;

WIN32.CreateHtaWindow関数は、表示すべきHTMLファイルのパスを引数に、HTAと等価なHTMLアプリケーションインスタンスを生成して返します。この返却オブジェクトには、以下のプロパティーが存在します。(変数名HTAと仮定した表記)

   HTA.window              windowオブジェクト
   HTA.document            documentオブジェクト
   HTA.Script              Scriptオブジェクト
   HTA.FraHwnd             アプリケーションウインドウHWND
   HTA.DocHwnd             HTMLドキュメントウインドウHWND

hello.jsのソースコードでは、SRC変数にScriptをHWND変数にアプリケーションウインドウHWNDを代入しています。

関数定義とHTML側へのディスパッチ転送

function hello()

{

    SCR.alert("Hello World");

}

SCR.Button1.onclick = hello;

上記ソースコードは、HTML側のスクリプトインスタンス中にあるID=" Button1"のエレメントがクリックされた場合の動作を設定しています。ここではalert()によって文字列を表示しようとしていますから、alertというメソッドが存在するオブジェクトSRC(HTML側スクリプト)を指定した、SRC.alert("Hello World");という記述が必要な事に注意してください。

HTMLアプリケーションの表示と消滅の待機

HTA.Show(); WIN32.WiteForWindowVisible(HWND);

WIN32.MsgBox("正常終了");

HTMLアプリケーションインスタンスに対するShow()メソッド呼び出しは、アプリケーションウインドウの表示を行います。また、WIN32.WiteForWindowVisible();関数は引数HWNDが表示されている間メッセージループを動かしながら待機します。HTMLアプリケーションとJScriptが別スレッドで実行されていることを理解することは大変重要です。Button1がクリックされた場合の動作は、JScriptスレッドに存在しますから、必ず待機しなければなりません。

HTABOXコアプログラミングではHTMLアプリケーション生成前、または消滅後の動作を記述できます。ここではWIN32.MsgBox関数で"正常終了"という文字列を表示しています。

         WIN32プログラミングのミニチュア

WIN32APIによる「WindowsでHelloWorld」をC++で書いたことのある方は、このスクリプトがWindowsプログラミングのミニチュアになっていることに気づかれると思います。ウインドウにボタンを置き、ボタンのクリックによってダイアログを表示するC++コードを頭の中に思い描けば、HTABOXコアの威力をご理解いただけるのではないかと思います。

 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou