レジストリキーを作成する
C#でレジストリキーを作成するコードを紹介します。
概要
C#でレジストリのキーを作成する場合は、Microsoft.Win32 名前空間の Registry クラスを利用します。
書式
\HKEY_CURRENT_USER ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.CurrentUser.CreateSubKey("(作成するキー名)");
\HKEY_LOCAL_MACHINE ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.LocalMachine.CreateSubKey("(作成するキー名)");
\HKEY_CLASSES_ROOT ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("(作成するキー名)");
\HKEY_USERS ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.Users.CreateSubKey("(作成するキー名)");
\HKEY_CURRENT_CONFIG ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.CurrentConfig.CreateSubKey("(作成するキー名)");
パフォーマンスデータに関するHKEY_PERFORMANCE_DATA キーの操作です。(HKEY_PERFORMANCE_DATA はレジストリには存在しないキーです。)
Microsoft.Win32.Registry.PerformanceData.CreateSubKey("(作成するキー名)");
現在は使われていません。
Microsoft.Win32.Registry.DynData.CreateSubKey("(作成するキー名)");
プログラム
UI
下図のUIを作成します。フォームにテキストボックスとボタン、複数行的とボックスを配置します。
コード
下記のコードを記述します。フォームに配置したbutton1のクリックイベントを実装になります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RegistryDemo
{
public partial class FormWriteRegisitry : Form
{
public FormWriteRegisitry()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
string KeyName = textBox1.Text;
Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\"+KeyName);
if (rkey!= null) {
textBox2.Text = "OK";
}
}
}
}
解説
上部のテキストボックスに入力された名称のキーを
\HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo
キー内に作成するコードになります。
textBox1に入力された文字列を KeyName 変数に代入して受け取ります。
string KeyName = textBox1.Text;
Microsoft.Win32 名前空間の Registry クラスのアクセスしたいレジストリルートキーのフィールドオブジェクトのCreateSubKeyメソッドを呼び出します。今回は
\HKEY_CURRENT_USER
をルートキーとするレジストリにキーを作成しますので、Registry.CurrentUser フィールドの CreateSubKey メソッドを呼び出します。CreateSubKey メソッドの第一引数に作成するキーのルートノードからのフルパスを与えます。
下記のコードでは
SOFTWARE\iPentec\Demo\
キー内にテキストボックスに入力された文字のキーを作成します。
Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\"+KeyName);
CreateSubKeyは正常に終了すると RegistryKey オブジェクトを返します。オブジェクトが null であれば異常ですので、null出ないことを確認してテキストボックスに"OK"のメッセージを表示します。
if (rkey!= null) {
textBox2.Text = "OK";
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
上部のテキストボックスに "Penguin" の文字列を入力します。入力後 [Create RegKey] ボタンをクリックします。
キーの作成が正常に終了すると下部のテキストボックスに"OK"のメッセージが表示されます。
レジストリにキーが作成されているか確認します。レジストリエディタを起動します。
\HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo
キーを開きます。キー内に "Penguin" サブキーが作成されていることが確認できました。
C#のプログラムからレジストリのキーが作成できました。
補足
usingに
Microsoft.Win32
を追加すれば、名前空間の明示的指定は不要です。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32; //追加
namespace RegistryDemoNoUAC
{
public partial class FormRegistryWrite : Form
{
public FormRegistryWrite()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
string KeyName = textBox1.Text;
RegistryKey rkey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\" + KeyName);
if (rkey != null) {
textBox2.Text = "OK";
}
}
}
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用