対象は Windows Script Host です。
WScript.CreateObject() で接続できるのは、
トップオブジェクトのイベントなので、
子オブジェクトのイベントと接続したい場合、WScript.ConnectObject() を使います。
WScript オブジェクトにある GetObject メソッドですが、
これって、使えそうで使えません。(汗; (WMI 以外)
IE の取得とか試みたりしますが、出来ません。
結論ですが、これで取得できるのは、
Running Object Table に登録してあるオブジェクトだけです。
例えば Excel だと
WScript.GetObject("path\Book1.xls");
IE を取得するには、こっち。
対象は IE, HTA (WebBrowser Control) です。
スクリプト全般ですが、VB や VC にも適用できます。
(サンプルは JScript)
var objTL = new ActiveXObject("Scriptlet.Typelib");
var strGuid = objTL.GUID;
scrobj.dll (WSC) のオブジェクトを利用。
var objShell = new ActiveXObject("Shell.Application");
var e = new Enumerator(objShell.Windows());
for (; !e.atEnd(); e.moveNext()) {
var objIE = e.item();
alert(
objIE.LocationName + "\n" +
objIE.FullName + "\n" +
objIE.Path + "\n0x" +
objIE.HWND.toString(16)
);
}
Shell.Windows() はInternetExplorerオブジェクトのコレクションです。
プロパティ ではなく メソッド だったりしますが・・・。
レジストリ CLSID 下の対象となる {GUID} に Implemented Categories キーを作り、
該当する CATID (GUID) キーを設けてやります。
既存の CATID の種別は、HKEY_CLASSES_ROOT のComponent Categories キーに登録されています。
また、カテゴリーは、自分で勝手に作っていい事になっています。
作った GUID を勝手に意味のあるものにしましょう。
(説明不足かなぁ?)
レジストリ CLSID 下の対象となる {GUID} に TreatAs キーを設け、
複製したい CLSID を与えてやります。
OLE/COM Object Viewr でも設定できます。 (Implementation タグ)
(参考: CoTreatAsClass API)
これは CreateObject 等でオブジェクトをインスタンス化した時、TreatAs キーを有無を調べて、キーが存在する場合、
そちらの CLSID のオブジェクトを生成する。
というしくみになっています。
例えば、新しい CLSID を作り、TreatAs で
Scripting.FileSystemObject の CLSID を指してやれば、
別の ProgID で fso オブジェクトをインスタンス化できます。
さらにこの CLSID に安全であるカテゴリーを与えてやれば、
IE での警告を避ける事が出来ます。
(使い道は各人考えて下さい・・)