はじめに
コントロールパネルに表示される項目のCLSIDと名前(登録上の名前)をレジストリから取得する方法です。
コード
using System; using System.Linq; using Microsoft.Win32; namespace ConsoleApp1 { class Program { static void Main(string[] args) { using (var key = OpenControlPanelNameSpaceKey(false)) { var nameSpaceClsids = key.GetSubKeyNames() .Select(name => Guid.TryParseExact(name, "B", out var guid) ? guid : Guid.Empty) .Where(clsid => clsid != Guid.Empty); var nameSpaceClsidAndName = nameSpaceClsids.Select(clsid => { using (var subKey = key.OpenSubKey( clsid.ToString("B"), false)) { return (clsid, subKey.GetValue(null, null)); } }); foreach (var clsidAndName in nameSpaceClsidAndName) { Console.WriteLine(clsidAndName.ToString()); } Console.ReadKey(); } } private const string ControlPanelNameSpacePath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace"; public static RegistryKey OpenControlPanelNameSpaceKey( bool writable, RegistryView view = RegistryView.Registry64) { using (var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, view)) { return key.OpenSubKey(ControlPanelNameSpacePath, writable); } } } }
開発環境等
- Windows 10 Version 17134.48
- Microsoft Visual Studio Community 2017 Version 15.7.1
- Microsoft .NET Framework Version 4.7.03056
- ターゲットフレームワーク:.NET Framework 4.7.1
- C# 7.1
参考
2021/3/10:この記事は別のブログで投稿した記事を移動したものです。