吉里吉里2 2.26 rc2のtvp2win32-2.26stable\kirikiri2\src\plugins\win32\krkr_win32ole\manual.tjsを整形・補足したもの。
WIN32OLEクラス
コンストラクタ
WIN32OLE.WIN32OLE
- 機能/意味
- WIN32OLEオブジェクトの構築
- タイプ
- WIN32OLEクラスのコンストラクタ
- 構文
- WIN32OLE(name)
- 引数
- name…識別名またはCLSIDを文字列で指定
- 戻り値
- なし(void)
- 説明
- WIN32OLEクラスのオブジェクトを構築します
メソッド
WIN32OLE.invoke
- 機能/意味
- メソッドの実行
- タイプ
- WIN32OLEクラスのメソッド
- 構文
- invoke(name, ...)
- 引数
- name…メソッド名
以下パラメータ - 戻り値
- 実行するメソッドに依存
- 説明
- メソッドを実行します
WIN32OLE.set
- 機能/意味
- プロパティの設定
- タイプ
- WIN32OLEクラスのメソッド
- 構文
- set(name, value)
- 引数
- name…プロパティ名
value…設定値 - 戻り値
- なし(void)
- 説明
- プロパティに値を設定します
WIN32OLE.get
- 機能/意味
- プロパティの取得
- タイプ
- WIN32OLEクラスのメソッド
- 構文
- get(name)
- 引数
- name…プロパティ名
- 戻り値
- プロパティの設定値
- 説明
- プロパティの値を取得します
WIN32OLE.getConstant
- 機能/意味
- 定数の取得
- タイプ
- WIN32OLEクラスのメソッド
- 構文
- getConstant(obj=this)
- 引数
- obj…オブジェクト
- 戻り値
- 定数値
- 説明
- 指定したオブジェクトのプロパティとして定数を取得します。objを省略した場合は自分のオブジェクト内部に取得します
WIN32OLE.addEvent
- 機能/意味
- イベント受信オブジェクトの登録
- タイプ
- WIN32OLEクラスのメソッド
- 構文
- addEvent(eventName, receiver)
- 引数
- eventName…イベント種別名(例:"DWebBrowser2Events2")
receiver…イベントを受けるオブジェクト - 戻り値
- なし(void)
- 説明
- オブジェクトが持つイベント名と同じ名前のメソッドが呼び出されます。該当するメソッドが無い場合はなにも処理されません
サンプル
フォルダ選択ダイアログボックスを開くサンプル(TJS)
要コモンダイアログコントロール(comdlg32.ocx)。
VB6ランタイムライブラリなどに同梱されている。
ベクターにも類似のインストーラが公開されている。
// フォルダ選択ダイアログボックスを開くサンプル
var BIF_RETURNONLYFSDIRS = 0x01; // ファイルシステムディレクトリのみを返す var BIF_EDITBOX = 0x10; // エディットコントロールを表示
Plugins.link("win32ole.dll");
var objApplication = new WIN32OLE("Shell.Application"); var objFolder = objApplication.BrowseForFolder(0, "フォルダを選択してください", BIF_RETURNONLYFSDIRS|BIF_EDITBOX); if (objFolder == null) System.inform("キャンセルしました"); else if (!objFolder.Self.IsFileSystem) // BIF_RETURNONLYFSDIRSが利かないケースへの対処 System.inform("エラー:そのフォルダは選択できません"); else System.inform(objFolder.Items().Item().Path);
invalidate objApplication;
テキストファイルを作成するサンプル(TJS)
// テキストファイル(Shift JISコード)を作成するサンプル
Plugins.link("win32ole.dll");
var objFileSystem = new WIN32OLE("Scripting.FileSystemObject"); var objTextFile = objFileSystem.CreateTextFile("test.txt", true);
objTextFile.WriteLine("TextStreamオブジェクトならテキストファイルを"); objTextFile.WriteLine("読み書きすることができます。"); // ↑with (objTextFile) { .WriteLine(...); }と書くとエラーになる
objTextFile.Close();
invalidate objTextFile; invalidate objFileSystem;
System.inform("(krkr.eXeと同じフォルダに)test.txtを作成しました");
DAOでデータベース(CSVファイル)を扱うサンプル*1
Plugins.link("win32ole.dll");
Debug.console.visible = Debug.controller.visible = true;
// DBEngineオブジェクトを獲得 var objDBE = new WIN32OLE("DAO.DBEngine.36");
// Workspaceオブジェクトを獲得 var objWS = objDBE.Workspaces(0);
// Databaseオブジェクトを獲得 var objDB = objWS.OpenDatabase("C:\\DATABASE", false, false, "Text");
// リスト.csvから男性のデータのみ抽出し、年齢順にソート var objRS = objDB.OpenRecordset("SELECT * FROM [リスト.csv] WHERE 性別=\'男\' ORDER BY 年齢");
// 結果をコンソールに出力 while (!objRS.EOF) { Debug.message("氏名=%s, 年齢=%s".sprintf(objRS("氏名").Value, objRS("年齢").Value)); objRS.MoveNext(); }
// 後始末 objRS.Close(); objDB.Close(); invalidate objRS; invalidate objDB; invalidate objWS; invalidate objDBE;
C:\DATABASE\リスト.csvの内容は以下の通り。
NO,氏名,性別,年齢 1,阿井宇江男,男,20 2,可貴久毛子,女,18 3,沙士須瀬素,男,19 4,太知津手斗,男,22 5,奈荷濡音乃,女,20 6,羽比不経保,男,24
XMLファイルをダウンロードするサンプル(HTTP GET)
kikyou.infoからtags.xmlをダウンロードする例。tags.xmlの文字コードがUnicode(UTF-8)のため、saveStruct.dllで文字コードを合わせている。
Plugins.link("win32ole.dll"); Plugins.link("saveStruct.dll");
Debug.console.visible = Debug.controller.visible = true;
var strURL = "http://devdoc.kikyou.info/tvp/docs/kag3doc/contents/tagdb_xml/tags.xml"; //var strKey = "userid=ユーザーID&pass=パスワードとか"; // ←この辺りは未確認
var objHTTP = new WIN32OLE("MSXML2.XMLHTTP"); objHTTP.Open("GET", strURL, false); objHTTP.Send; //objHTTP.Send(strKey); Debug.message("Status = " + objHTTP.Status); if (objHTTP.Status == 200) { var arr = new Array(); arr.add(objHTTP.ResponseText); arr.save2("tags.xml", true, 0); invalidate arr; } invalidate objHTTP;
- POSTもできると思うが確認していない
- MSXML2.XMLHTTP.ResponseBody経由でバイナリファイルのダウンロードはできない模様(ADODB.Streamへ渡す際にエラーになる)
備考
- コレクションも扱えるが、コレクションの各要素への繰り返し処理はサポートされていないため、不便
- TJSにはVBScriptのFor Each Element In Collection~Nextに相当する構文がない上に、JScriptのEnumeratorに相当するクラスもない
- 確認した限りでは、WIN32OLEオブジェクトのメソッドで作成したCOMオブジェクト(例:上記サンプルのTextStreamオブジェクト)にwithステートメントは適用できない。なお、WIN32OLEオブジェクトにはwithステートメントが適用できる
- COMオブジェクトのメソッドで引数なしのものは、 Win32OleObject.Method() ではなく Win32OleObject.Method または Win32OleObject.invoke("Method") と書かないとエラーになるケースがある
- 下記サンプルのWeb Browser interfaceオブジェクトの場合、 objIE.GoHome() と記述するとエラーになる
ActiveXクラス
スーパークラス
WIN32OLEクラス
コンストラクタ
ActiveX.ActiveX
- 機能/意味
- ActiveXオブジェクトの構築
- タイプ
- ActiveXクラスのコンストラクタ
- 構文
- ActiveX(name, win=null, left=0, top=0, width=100, height=100)
- 引数
- name…識別名またはCLSIDを文字列で指定(※WIN32OLEの指定とはCLSIDの書式が違うので注意;CAxWindow::CreateControlの書式)
win…指定するとそのウインドウの上に生成します。省略すると独立ウインドウになります
left…表示座標。ウインドウ指定かつ省略の場合はウインドウのクライアント領域の左上
top…表示座標。ウインドウ指定かつ省略の場合はウインドウのクライアント領域の左上
width…表示サイズ。ウインドウ指定かつ省略の場合は親ウインドウのクライアント領域のサイズ
height…表示サイズ。ウインドウ指定かつ省略の場合は親ウインドウのクライアント領域のサイズ - 戻り値
- なし(void)
- 説明
- ActiveXクラスのオブジェクトを構築します
メソッド
ActiveX.setPos
- 機能/意味
- 座標指定
- タイプ
- ActiveXクラスのメソッド
- 構文
- setPos(left, top)
- 引数
- left…左端座標
top…上端座標 - 戻り値
- なし(void)
- 説明
- コンポーネントの表示座標を設定します
ActiveX.setSize
- 機能/意味
- サイズ指定
- タイプ
- ActiveXクラスのメソッド
- 構文
- setSize(width, height)
- 引数
- width…横幅
height…縦幅 - 戻り値
- なし(void)
- 説明
- コンポーネントの表示サイズを設定します
ActiveX.setExternalUI
- 機能/意味
- 拡張UI指定
- タイプ
- ActiveXクラスのメソッド
- 構文
- setExternalUI()
- 引数
- なし
- 戻り値
- なし(void)
- 説明
- IEコンポーネントでのみ意味を持ちます。現在の版では、これ呼び出すことでコンテキストメニューが抑制されます
プロパティ
ActiveX.left
- 機能/意味
- 左端座標
- タイプ
- ActiveXクラスのプロパティ(読み書き可能)
- 説明
- コンポーネントの左端座標を表します
ActiveX.top
- 機能/意味
- 上端座標
- タイプ
- ActiveXクラスのプロパティ(読み書き可能)
- 説明
- コンポーネントの上端座標を表します
ActiveX.width
- 機能/意味
- 横幅
- タイプ
- ActiveXクラスのプロパティ(読み書き可能)
- 説明
- コンポーネントの横幅を表します
ActiveX.height
- 機能/意味
- 縦幅
- タイプ
- ActiveXクラスのプロパティ(読み書き可能)
- 説明
- コンポーネントの縦幅を表します
ActiveX.visible
- 機能/意味
- 表示状態
- タイプ
- ActiveXクラスのプロパティ(読み書き可能)
- 説明
- コンポーネントの表示状態を表します
サンプル
MS Agentを表示するサンプル(TJS)
WindowsMe/2000/XPなら標準でMS Agentがインストールされている。
// MS Agentを表示する簡単なサンプル
Plugins.link("win32ole.dll");
class EventHandler { var character = void; function EventHandler() { } function finalize() { } function Click(CharID, Button, Shift, X, Y) { if (character !== void) character.Speak("あいた!"); } function DblClick(CharID, Button, Shift, X, Y) { if (character !== void) character.Speak("いたた!!!"); } function Show(CharID, X, Y, Cause) { if (character !== void) character.Speak("呼ばれて飛び出てジャジャジャジャーン♪(古"); } function DragComplete(CharID, Button, Shift, X, Y) { if (character !== void) character.Speak("ほっ"); } }
var control = new ActiveX("Agent.Control.1"); control.Connected = true; control.Characters.Load("Agent"); var ev = new EventHandler(); control.addEvent("_AgentEvents", ev);
var character = control.Characters("Agent"); ev.character = character; character.MoveTo(100, 100); character.Show();
System.inform("MS Agentを表示しました"); invalidate character; invalidate control;
Internet Explorerのコントロールを埋め込むサンプル(TJS)
Plugins.link("win32ole.dll");
class WebBrowserWindow extends Window { var menu_file; // [ファイル]メニュー var menu_open; // [ファイル‐開く]メニュー var menu_exit; // [ファイル‐閉じる]メニュー var menu_move; // [移動]メニュー var menu_prev; // [移動‐前へ]メニュー var menu_next; // [移動‐次へ]メニュー var menu_home; // [移動‐ホーム]メニュー var objIE; // ウェブブラウザオブジェクト
function WebBrowserWindow() { super.Window();
caption = "吉里吉里/Web Browser"; // タイトルバーのキャプションを設定 setInnerSize(640, 480); // クライアント領域サイズを640×480ピクセルに変更 visible = true; // ウィンドウを表示する
// [ファイル]メニューを作成 menu_file = new MenuItem(this, "ファイル(&F)"); menu.add(menu_file); menu_file.add(menu_open = new MenuItem(this, "開く(&O)...")); menu_file.add(new MenuItem(this, "-")); menu_file.add(menu_exit = new MenuItem(this, "閉じる(&C)"));
// [移動]メニューを作成 menu_move = new MenuItem(this, "移動(&M)"); menu.add(menu_move); menu_move.add(menu_prev = new MenuItem(this, "前へ(&P)")); menu_move.add(menu_next = new MenuItem(this, "次へ(&N)")); menu_move.add(new MenuItem(this, "-")); menu_move.add(menu_home = new MenuItem(this, "ホーム(&H)"));
// ウェブブラウザオブジェクトを獲得 objIE = new ActiveX("Shell.Explorer.2", this); with (objIE) { .setPos(0, 0); // ウィンドウの左上隅に配置 .invoke("GoHome"); // ホームページを開く } }
function finalize() { invalidate objIE; super.finalize(); }
function onResize() { // ウェブブラウザオブジェクトのサイズをウィンドウのサイズに合わせる objIE.setSize(innerWidth, innerHeight); }
function action(ev) { switch (ev.target) { case menu_open: // [ファイル‐開く]メニューが選択された var address = System.inputString("開く", "インターネットアドレスを入力してください", "http://www.google.co.jp/"); if (address !== void && address != "") objIE.Navigate2(address); break; case menu_exit: // [ファイル‐閉じる]メニューが選択された close(); break; case menu_prev: // [移動‐前へ]メニューが選択された objIE.invoke("GoBack"); break; case menu_next: // [移動‐次へ]メニューが選択された objIE.invoke("GoForward"); break; case menu_home: // [移動‐ホーム]メニューが選択された objIE.invoke("GoHome"); break; } } }
var win = new WebBrowserWindow();
FLASH Playerのコントロールを埋め込むサンプル(TJS)
要FLASH Player 9以降。krflash.dllを組み込まなくてもFLASHが再生できることが判る。
Plugins.link("win32ole.dll");
class FlashPlayerWindow extends Window { var menu_file; // [ファイル]メニュー var menu_open; // [ファイル‐開く]メニュー var menu_exit; // [ファイル‐閉じる]メニュー var menu_play; // [再生]メニュー var menu_again; // [再生‐再生]メニュー var menu_stop; // [再生‐停止]メニュー var menu_rewind; // [再生‐巻き戻す]メニュー var menu_loop; // [再生‐ループ]メニュー var objFlash; // FLASHプレイヤーオブジェクト
function FlashPlayerWindow() { super.Window();
caption = "吉里吉里/FLASH Player"; // タイトルバーのキャプションを設定 setInnerSize(640, 480); // クライアント領域サイズを640×480ピクセルに変更 visible = true; // ウィンドウを表示する
// [ファイル]メニューを作成 menu_file = new MenuItem(this, "ファイル(&F)"); menu.add(menu_file); menu_file.add(menu_open = new MenuItem(this, "開く(&O)...")); menu_file.add(new MenuItem(this, "-")); menu_file.add(menu_exit = new MenuItem(this, "閉じる(&C)"));
// [再生]メニューを作成 menu_play = new MenuItem(this, "再生(&P)"); menu.add(menu_play); menu_play.add(menu_again = new MenuItem(this, "再生(&A)")); menu_play.add(menu_stop = new MenuItem(this, "停止(&S)")); menu_play.add(menu_rewind = new MenuItem(this, "巻き戻す(&N)")); menu_play.add(new MenuItem(this, "-")); menu_play.add(menu_loop = new MenuItem(this, "ループ(&L)"));
// FLASHプレイヤーオブジェクトを獲得 objFlash = new ActiveX("ShockwaveFlash.ShockwaveFlash.9", this); with (objFlash) { .setPos(0, 0); // ウィンドウの左上隅に配置 .visible = true; menu_loop.checked = .Loop; } }
function finalize() { objFlash.invoke("StopPlay"); invalidate objFlash; super.finalize(); }
function onResize() { // FLASHプレイヤーオブジェクトのサイズをウィンドウのサイズに合わせる objFlash.setSize(innerWidth, innerHeight); }
function action(ev) { switch (ev.target) { case menu_open: // [ファイル‐開く(ファイル指定)]メニューが選択された var params = %[ "filter"=>[["SWFファイル(*.swf)|*.swf"]] ]; if (Storages.selectFile(params)) { objFlash.LoadMovie(0, Storages.getLocalName(params.name)); } invalidate params; break; case menu_exit: // [ファイル‐閉じる]メニューが選択された close(); break; case menu_again: // [再生‐再生]メニューが選択された objFlash.invoke("Play"); break; case menu_stop: // [再生‐停止]メニューが選択された objFlash.invoke("StopPlay"); break; case menu_rewind: // [再生‐巻き戻す]メニューが選択された objFlash.invoke("Rewind"); break; case menu_loop: // [再生‐ループ]メニューが選択された objFlash.Loop = menu_loop.checked = !menu_loop.checked; break; } } }
var win = new FlashPlayerWindow();
関連項目
- Windows 2000 Resource Kit Tools for administrative tasks…OLE/COM Object Viewerがダウンロードできる(iviewers.dllが含まれていないため別途入手~システムに登録する必要あり;文書番号176938)