参照設定
下記投稿のクラスを使用しています。
コード
using System; using System.Collections.Generic; using System.Linq; using Microsoft.Win32; using Oxalis.Windows.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var controlPaneNameSpaceClsids = ControlPanelNameSpaceUtility.GetControlPanelNameSpaceClsids(); using (var clsidKey = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64)) { var clsidAndIndirectLocalizedStrings = controlPaneNameSpaceClsids.Select( clsid => { using (var key = clsidKey.OpenSubKey("CLSID\\" + clsid.ToString("B"), false)) { return (clsid, (string)key?.GetValue("LocalizedString")); } }); var s = ShellIndirectString.Load(clsidAndIndirectLocalizedStrings.First().Item2); var clsidAndDirectLocalizedStrings = clsidAndIndirectLocalizedStrings.Select( source => (source, ShellIndirectString.LoadDefault(source.Item2, null))); foreach (var clsidAndLocalizedString in clsidAndDirectLocalizedStrings) { Console.WriteLine(clsidAndLocalizedString); } Console.ReadKey(); } } } public static class ControlPanelNameSpaceUtility { public 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); } } public static IEnumerable<Guid> GetControlPanelNameSpaceClsids() { using (var key = OpenControlPanelNameSpaceKey(false)) { return key.GetSubKeyNames() .Select(name => Guid.TryParseExact(name, "B", out var guid) ? guid : Guid.Empty) .Where(clsid => clsid != Guid.Empty); } } } }
開発環境等
- 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:この記事は別のブログで投稿した記事を移動したものです。