WSHから他のWSHを操作する。(その3)
VBScriptもJScriptもCOMオブジェクトです。
なので、それぞれのオブジェクトを他方に渡せば、他方のオブジェクトを操作したり、関数を呼び出したりもできます。
では、VBScriptからJScriptへ、JScriptからVBScriptへ、それぞれの関数のオブジェクト参照を渡して、互いに呼び出してみましょう。
コマンドプロンプトを二つ開いて、一方で、
cscript f1.vbs
CreateObject("Shell.Application").Windows().Item(0).PutProperty "VBS",GetRef("Sub1")
Dim fWait
fWait=True
Do While fWait
WScript.Sleep 100
Loop
Set JS=CreateObject("Shell.Application").Windows().Item(0).GetProperty("JS")
JS "なんだよ"
Sub Sub1(s)
WScript.Echo s
fWait=False
End Sub
他方で、
cscript f2.js
WScript.CreateObject("Shell.Application").Windows().Item(0).PutProperty("JS",func1);
var VBS=WScript.CreateObject("Shell.Application").Windows().Item(0).GetProperty("VBS");
VBS("おい");
WScript.Sleep(10000);
function func1(s){
WScript.Echo(s);
WScript.Timeout=1;
WScript.Quit(1);
}
関数はオブジェクトのデフォルトメソッドになってます。