レジストリの操作レジストリへの書き込み、読み込み、削除を行うレジストリから値を読み込む、レジストリに値を書き込む、レジストリの値やキーを削除する方法を紹介します。レジストリの操作全般はRegistryKeyクラスを使って行うことができます。 レジストリへの書き込みまず初めにレジストリに書き込む例を示します。RegistryKey.CreateSubKeyメソッドでキーを開き、RegistryKey.SetValueメソッドで書き込みます。 次の例では、レジストリのキー"HKEY_CURRENT_USER\Software\test\sub"にデータを書き込んでいます。 [VB.NET] 'レジストリへの書き込み '(「HKEY_CURRENT_USER\Software\test\sub」に書き込む) 'キーを開く Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\test\sub") '上のコードでは指定したキーが存在しないときは新しく作成される。 '作成されないようにするには次のようにする。 'Dim regkey As Microsoft.Win32.RegistryKey = _ ' Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\test\sub", True) 'レジストリへの書き込み '文字列を書き込む(REG_SZで書き込まれる) regkey.SetValue("string", "StringValue") '整数を書き込む(REG_DWORDで書き込まれる) regkey.SetValue("int", 100) '文字列配列を書き込む(REG_MULTI_SZで書き込まれる) Dim s As String() = {"1", "2", "3"} regkey.SetValue("StringArray", s) 'バイト配列を書き込む(REG_BINARYで書き込まれる) Dim bs As Byte() = {0, 1, 2} regkey.SetValue("Bytes", bs) '閉じる regkey.Close() [C#] //レジストリへの書き込み //(「HKEY_CURRENT_USER\Software\test\sub」に書き込む) //キーを開く Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\test\sub"); //上のコードでは指定したキーが存在しないときは新しく作成される。 //作成されないようにするには次のようにする。 //Microsoft.Win32.RegistryKey regkey = // Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\test\sub", true); //レジストリへの書き込み //文字列を書き込む(REG_SZで書き込まれる) regkey.SetValue("string", "StringValue"); //整数を書き込む(REG_DWORDで書き込まれる) regkey.SetValue("int", 100); //文字列配列を書き込む(REG_MULTI_SZで書き込まれる) string[] s = new string[] {"1", "2", "3"}; regkey.SetValue("StringArray", s); //バイト配列を書き込む(REG_BINARYで書き込まれる) byte[] bs = new byte[] {0, 1, 2}; regkey.SetValue("Bytes", bs); //閉じる regkey.Close(); レジストリエディタで見ると、"HKEY_CURRENT_USER\Software\test\sub"に次のように書き込まれます。 「(標準)」に書き込むには、SetValueメソッドで値の名前に空白文字列""を指定します。 補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.Registry.SetValueメソッドでレジストリに書き込むこともできます。 データ型を指定して書き込む.NET Framework 2.0からは、SetValueメソッドの3番目のパラメータにより、レジストリデータ型を指定して書き込むことができます。書き込もうとしている値が指定されたデータ型と一致しない場合は、エラーが発生します。 下にREG_EXPAND_SZとREG_QWORDで書き込む例を示します。 [VB.NET] 'レジストリへの書き込み Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\test\sub") 'REG_EXPAND_SZで書き込む regkey.SetValue("ExpandString", "%windir%", _ Microsoft.Win32.RegistryValueKind.ExpandString) 'REG_QWORDで書き込む regkey.SetValue("QWord", 1000, Microsoft.Win32.RegistryValueKind.QWord) '閉じる regkey.Close() [C#] //レジストリへの書き込み Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\test\sub"); //REG_EXPAND_SZで書き込む regkey.SetValue("ExpandString", "%windir%", Microsoft.Win32.RegistryValueKind.ExpandString); //REG_QWORDで書き込む regkey.SetValue("QWord", 1000, Microsoft.Win32.RegistryValueKind.QWord); //閉じる regkey.Close(); SetValueメソッドの3番目のパラメータに指定できるRegistryValueKind列挙体のメンバとその意味は、次のようなものです(ヘルプからの抜粋)。
レジストリからの読み込み次にレジストリから値を読み込む例を示します。RegistryKey.OpenSubKeyメソッドでキーを開き、RegistryKey.GetValueメソッドで読み込みます。 下の例では指定されたキー("HKEY_CURRENT_USER\Software\test\sub")にある値の取得と、その下にあるすべてのキーと値を取得する方法も示しています。 [VB.NET] 'レジストリからの読み取り '(「HKEY_CURRENT_USER\Software\test\sub」にあるデータの値を取得) 'キーを読み取り専用で開く Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\test\sub", False) 'キーが存在しないときはNothingが返される If (regkey Is Nothing) Then Return '文字列を読み込む '読み込む値が存在しないときはNothingが返される Dim stringValue As String = CType(regkey.GetValue("string"), String) 'キーに値が存在しないときに指定した値を返すようにするには、次のようにする '(ここでは"default"を返す) 'Dim stringValue As String = CType(regkey.GetValue("string", "default")) '整数を読み込む Dim intValue As Integer = CType(regkey.GetValue("int"), Integer) '文字列配列を読み込む Dim strings As String() = CType(regkey.GetValue("StringArray"), String()) 'バイト配列を読み込む Dim bytes As Byte() = Ctype(regkey.GetValue("Bytes"), Byte()) 'sub以下にあるキーの数を表示 Console.WriteLine("サブキーの数:{0}", regkey.SubKeyCount) 'sub以下のすべてのキー名を取得 Dim keyNames() As String = regkey.GetSubKeyNames() '表示する Dim k As String For Each k In keyNames Console.WriteLine(k) Next 'sub以下にある値の数を表示 Console.WriteLine("値の数:{0}", regkey.ValueCount) 'sub以下のすべての値名を取得 Dim valueNames() As String = regkey.GetValueNames() '表示する Dim v As String For Each v In valueNames Console.WriteLine(v) Next '閉じる regkey.Close() [C#] //レジストリからの読み取り //(「HKEY_CURRENT_USER\Software\test\sub」にあるデータの値を取得) //キーを読み取り専用で開く Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\test\sub", false); //キーが存在しないときは null が返される if (regkey == null) return; //文字列を読み込む //読み込む値が存在しないときは null が返される string stringValue = (string) regkey.GetValue("string"); //キーに値が存在しないときに指定した値を返すようにするには、次のようにする //(ここでは"default"を返す) //string stringValue = (string) regkey.GetValue("string", "default"); //整数を読み込む int intValue = (int) regkey.GetValue("int"); //文字列配列を読み込む string[] strings = (string[]) regkey.GetValue("StringArray"); //バイト配列を読み込む byte[] bytes = (byte[]) regkey.GetValue("Bytes"); //sub以下にあるキーの数を表示 Console.WriteLine("サブキーの数:{0}", regkey.SubKeyCount); //sub以下のすべてのキー名を取得 string[] keyNames = regkey.GetSubKeyNames(); //表示する foreach (string k in keyNames) Console.WriteLine(k); //sub以下にある値の数を表示 Console.WriteLine("キーの値の数:{0}", regkey.ValueCount); //sub以下のすべての値名を取得 string[] valueNames = regkey.GetValueNames(); //表示する foreach (string v in valueNames) Console.WriteLine(v); //閉じる regkey.Close(); なお、「(標準)」から読み取るには、GetValueメソッドで値の名前に空白文字列""を指定します。 補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.Registry.GetValueメソッドでレジストリの値を読み込むこともできます。 REG_EXPAND_SZ型のデータを展開せずに取得する.NET Framework 2.0からは、GetValueメソッドの3番目のパラメータにRegistryValueOptions.DoNotExpandEnvironmentNamesを指定することにより、環境変数を展開せずに値を取得できます。 [VB.NET] 'レジストリからの読み取り Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\test\sub", False) If regkey Is Nothing Then Return End If 'REG_EXPAND_SZデータ型の値を取得する Dim stringValue As String '展開して取得する stringValue = CStr(regkey.GetValue("ExpandString")) Console.WriteLine(stringValue) '展開せずに取得する stringValue = CStr(regkey.GetValue("ExpandString", "", _ Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames)) Console.WriteLine(stringValue) '閉じる regkey.Close() [C#] //レジストリからの読み取り Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\test\sub", false); if (regkey == null) return; //REG_EXPAND_SZデータ型の値を取得する string stringValue; //展開して取得する stringValue = (string)regkey.GetValue("ExpandString"); Console.WriteLine(stringValue); //展開せずに取得する stringValue = (string)regkey.GetValue("ExpandString", "", Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames); Console.WriteLine(stringValue); //閉じる regkey.Close(); レジストリの削除最後にレジストリのキーまたは値を削除する例です。キーにある値を削除するには、RegistryKey.DeleteValueメソッドを使用します。キーの削除はDeleteSubKeyまたはDeleteSubKeyTreeメソッドで行います。DeleteSubKeyは削除しようとするキーに子サブキーが存在すると削除に失敗しますが、DeleteSubKeyTreeは子サブキーもろとも削除します。 [VB.NET] 'レジストリの削除 'キーを書き込み許可で開く Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\test", True) 'キーにある値の削除 '"HKEY_CURRENT_USER\Software\test"にある"string"という値を削除する regkey.DeleteValue("string") '次のようにすると指定した値が見つからなくてもエラーが出ない 'regkey.DeleteValue("string", False) 'キーを削除(子サブキーがあるとエラーになる) '"HKEY_CURRENT_USER\Software\test\sub"を削除する regkey.DeleteSubKey("sub") '次のようにすると指定したキーが見つからなくてもエラーが出ない 'regkey.DeleteSubKey("sub", False) '閉じる regkey.Close() 'キーとそのツリーを根こそぎ削除 '"HKEY_CURRENT_USER\Software\test"を削除する Microsoft.Win32.Registry.CurrentUser.DeleteSubKeyTree("Software\test") [C#] //レジストリの削除 //キーを書き込み許可で開く Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\test", true); //キーにある値の削除 //"HKEY_CURRENT_USER\Software\test"にある"string"という値を削除する regkey.DeleteValue("string"); //次のようにすると指定した値が見つからなくてもエラーが出ない //regkey.DeleteValue("string", false); //キーを削除(子サブキーがあるとエラーになる) //"HKEY_CURRENT_USER\Software\test\sub"を削除する regkey.DeleteSubKey("sub"); //次のようにすると指定したキーが見つからなくてもエラーが出ない //regkey.DeleteSubKey("sub", false); //閉じる regkey.Close(); //キーとそのツリーを根こそぎ削除 //"HKEY_CURRENT_USER\Software\test"を削除する Microsoft.Win32.Registry.CurrentUser.DeleteSubKeyTree(@"Software\test"); 補足:レジストリのキーを開くためにCreateSubKeyを使うか、OpenSubKeyを使うか迷うところですが、OpenSubKeyは指定のない限り読み取り専用で開くため、レジストリに書き込むときはCreateSubKeyで開き、読み取るときはOpenSubKeyで開くというのが基本となりそうです。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|