potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

C# コントロールパネルに表示される項目のCLSIDをレジストリから取得する

はじめに

コントロールパネルに表示される項目の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);

                foreach (var clsid in nameSpaceClsids)
                {
                    Console.WriteLine(clsid.ToString("B"));
                }

                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);
            }
        }
    }
}

開発環境等

参考

  1. How to Register Executable Control Panel Items - MSDN