1.はじめに
C#でレジストリを読む機会があったのでやってみた自分用メモ。
以下の記事に感謝します。
2.必要なこと
2-1. Registryクラス
2-1-1.準備1
レジストリを読むので Registry クラスを使います。
コード断片
using Microsoft.Win32;
2-1-2.準備2
レジストリはWindowsにしかない概念なので「Windowsでしか使えませんよ~」と注意喚起します。C#は様々なプラットホームで動く(中間言語)ので、特定の環境(この場合はWindows)でしか動かないプログラムは「そういうモノです」ってプログラムに書いた方が良いでしょう、という話です。
コード断片
using System.Runtime.Versioning;
[assembly: SupportedOSPlatform("windows")]
書かないと警告(CA1416)されます。
3.読みかた
以下のいずれかの方法で読むことができます。どちらを選ぶかは、好みやコーディングルールの範疇だと思います。以下、どのWindowsでもありそうなキーを例にします。
3-1.定義済キーを文字列で指定する方法
HKEY_CURRENT_USER とか HKEY_LOCAL_MACHINE を文字列で書く方法です。
コード断片
string root = "HKEY_CURRENT_USER";
string path = root + "\\" + @"Control Panel\Desktop";
var timeOut = Registry.GetValue(path, "CaretTimeout", 0);
3-2.定義済キーを Registry クラスの定義値(フィールド)に任せる方法
コード断片
using (var regKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop"))
{
if (regKey != null)
{
var timeOut = regKey.GetValue("CaretTimeout");
}
}
読むだけだったら 3-1. の方が楽かもしれないですね。
どんなフィールドが定義されているかは Registry クラスの説明を見てください。一応リンクを再掲します。
4.まとめ(全コード)
Test.cs
using Microsoft.Win32;
using System.Runtime.Versioning;
[assembly: SupportedOSPlatform("windows")]
namespace Test001
{
internal class Program
{
static void Main(string[] args)
{
// その1
{
string root = "HKEY_CURRENT_USER";
string path = root + "\\" + @"Control Panel\Desktop";
var timeOut = Registry.GetValue(path, "CaretTimeout", 0);
}
// その2
using (var regKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop"))
{
if (regKey != null)
{
var timeOut = regKey.GetValue("CaretTimeout");
}
}
}
}
}
ありがとうございました。