今レジストリキーを操作するVBscriptを書いているので、忘れないうちに、メモをしておきたい思います。
VBでレジストリを操作するためのWSH(Windows Scripting Host)のオブジェクトWscript.Shellを使用すると、レジストリキーを管理することが出来ます。
'Wscript.Shellオブジェクトの定義
Dim objWsh
Set objWsh = CreateObject("Wscript.Shell")
Wscript.Shellにはいくつかメソッドがあるので、気軽にレジストリキー、値の作成、変更および削除などの操作が出来ます。
RegWrite
RegRead
RegDelete など
Wscript.Shellオブジェクト詳細'1つキーと二つ値を作成
'値名は(既定)、値は1
objWsh.RegWrite "HKCU\Software\Test\", 1, "REG_DWORD"
'値名は"testValueName"、値は"testValue"
objWsh.RegWrite "HKCU\Software\Test\testValueName", "testValue", "REG_SZ"
'キー名または値名の値を取得
'(既定)の値
Wscript.Echo objWsh.RegRead("HKCU\Software\Test\")
'testValueNameの値
Wscript.Echo objWsh.RegRead("HKCU\Software\Test\testValueName")
'testValueNameの値をtestValueChangedに変更
objWsh.RegWrite "HKCU\Software\Test\testValueName", "testValueChanged"
'testValueNameを削除
objWsh.RegDelete("HKCU\Software\Test\testValueName")
'キーTestを削除
objWsh.RegDelete("HKCU\Software\Test\")
※注意:RegWriteに複数引数を渡す場合は、括弧をつける必要はない
Wscript.Shellは便利ですが、機能としては十分ではありません。たとえば、サブキーの列挙やREG_MULTI_SZ型の値の変更などは出来ない。じゃ、どうしましょう。これからWMIを使う方法をご紹介いたします。
'サブキーの列挙
'キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetのサブキー一覧を取得
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut
'WMI サービスに接続し、さらに
StdRegProv クラスに接続しています
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
'すべてのサブキーを出力する
For Each subkey In arrSubKeys
StdOut.WriteLine subkey
Next
コマンドラインモードで実行すれば、サブキー名が表示される
cscript.exe [script Name]
'キーまたは値の存在確認、取得、変更
'strValueはnullの場合に、キーまたは値は存在しない。取得した値をstrValue変数に保存
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Test", "testValueName", strValue
if IsNull(strValue) Then
Wscript.echo "not exist"
else
Wscript.echo "exist"
end if
'変更。testValueNameが存在しない時に、新規作成する
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Test","testValueName", Array("a","b")
変更するには、管理者モードで実行する必要があります。