64ビット環境でScriptControl

64ビット環境でScriptControlライクな物を使えるようにします。
利用可能なメソッド、プロパティは以下の通りです。
メソッド: プロパティ: [ScriptControlX64.wsc]


説明など

■WScriptオブジェクトの利用■

別プロセスとしてWSHを起動し、そのコードを動的に生成することで
ScriptControlの動きを実現させています。
処理が動くのは別プロセスのWSH内なので、デフォルトでWSCript(またはWSH)
オブジェクトを利用することができます。
例:
Set s = GetObject("script:C:\script\ScriptControlX64.wsc")
s.Language = "VBScript"
s.ExecuteStatement "MsgBox WScript.ScriptFullName"

' WScriptそのものが欲しい場合
s.AddCode "Function getWSH: Set getWSH = WScript: End Function"
Set w = s.Eval("getWSH()")

■Runメソッド■

「Run(funcName, argArray)」メソッドは存在しません。
EvalまたはCodeObjectを利用してください。
例:
Set s = GetObject("script:C:\script\ScriptControlX64.wsc")
s.Language = "JScript"
s.AddCode "function encode(s){ return encodeURI(s); }"
target = "エンコードテスト"
result = a.Eval("encode(""" & target & """);")
' または
result = s.CodeObject.encode(s)
		   

■CodeObjectについて■

CodeObjectはWScriptの参照なので追加したメソッドを直接実行できます。
オブジェクトのやり取りもAddObjectではなくCodeObjectを利用したほうが楽です。
例:
Set s = GetObject("script:C:\script\ScriptControlX64.wsc")
s.Language = "VBScript"
s.AddCode "Sub addDictionary(dict, key, value): dict.Add key, value: End Sub"
Set dict = CreateObject("Scripting.Dictionary")

' AddObjectのパターン
s.AddObject "dict", dict
s.ExecuteStatement "addDictionary dict, ""key"", 111"

' CodeObjectのパターン
s.CodeObject.addDictionary dict, "key", 111
			

■PowerShellからの利用■

以下の形でPowerShellからもScriptControlX64を参照可能です。

$s = [system.runtime.interopservices.marshal]::BindToMoniker("script:C:\script\ScriptControlX64.wsc")
または
[reflection.assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
$s = [Microsoft.VisualBasic.Interaction]::GetObject("script:C:\scriptcontrol\ScriptControlX64.wsc")

この場合、メソッドコール時に渡す末尾の引数は$nullとしてください。
例:
$s = [system.runtime.interopservices.marshal]::BindToMoniker("script:C:\script\ScriptControlX64.wsc")
$s | Get-Member Name MemberType Definition ---- ---------- ---------- AddCode Method Variant AddCode (Variant, Variant) AddObject Method Variant AddObject (Variant, Variant, Variant) Eval Method Variant Eval (Variant, Variant) ExecuteStatement Method Variant ExecuteStatement (Variant, Variant) CodeObject Property Variant CodeObject () {get} Language Property Variant Language () {get} {set} $s.Language = "VBScript" $s.AddCode("Function getTypeName(v): getTypeName = TypeName(v):End Function", $null) $s.CodeObject | Get-Member Name MemberType Definition ---- ---------- ---------- getTypeName Method Variant getTypeName (Variant) $s.CodeObject.getTypeName((dir .\test.txt)) FileInfo

■制限事項■



戻る