« バッチファイルからシフトキーの押し下げ状態を調べる。 | トップページ | スクリプトで、PATHにないアプリを起動する。 »

2007年3月25日 (日)

環境に依存しないProgIDでCreateObject()するには?

CreateObject(ProgID)のProgIDは環境に依存して異なることがあって困ります。
そういうときは、一意なCLSIDを使えばよいわけですが。。。

例えば、"ScriptControl"、HTAやWSFなら、
<object classid=clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC>
と、書けますが、CreateObject()の場合は?

Set wShell=CreateObject("WScript.Shell")
ProgID=wShell.RegRead("HKCR\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}\ProgID\")
Set SC=CreateObject(ProgID)

一行では、
Set SC=CreateObject(CreateObject("WScript.Shell").RegRead("HKCR\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}\ProgID\"))

関数化すると、
Function GetProgID(CLSID)
Dim wShell
Set wShell=CreateObject("WScript.Shell")
GetProgID=wShell.RegRead("HKCR\CLSID\{"&CLSID&"}\ProgID\")
End Function

Set SC=CreateObject(GetProgID("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"))

« バッチファイルからシフトキーの押し下げ状態を調べる。 | トップページ | スクリプトで、PATHにないアプリを起動する。 »