C# Windows10のダークモードいいっすね!アプリケーションのダークモード設定を取得してみましょ!ヽ(*^。^*)ノ

設定取得できれば後は煮るなり焼くなり( ̄ー ̄)ニヤリ
リアルタイム追従じゃない簡単な奴で…

普段使っているのがダークモードなのに自分のアプリがライトモードのままっていう(;^_^A アセアセ・・・
自動では変わってくれないようなので、ひと手間モード切替処理を入れましょ!

動的切り替えは、参考記事参照で

Windows Formでぱぱっと・・・
あー。WPF勉強してるんだった・・・
今度、WPF実装でコード書いてきます(´・ω:;.:…


        /// 
        /// AppsUseLightTheme の値を取得する。
        /// ダークモード:0 ライトモード:1 値がないなどのエラー:-1
        /// using Microsoft.Win32;()
        /// 
        private int GetAppsUseLightTheme()
        {
            int getmode = -1;

            // 操作するレジストリ・キーの名前
            string rKeyName = @"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
            // 取得処理を行う対象となるレジストリの値の名前
            string rGetValueName = "AppsUseLightTheme";

            // レジストリの取得
            try
            {
                // レジストリ・キーのパスを指定してレジストリを開く
                Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(rKeyName);

                // レジストリの値を取得(DWord)
                getmode = (int)rKey.GetValue(rGetValueName);

                // 開いたレジストリ・キーを閉じる
                rKey.Close();
            }
            catch (NullReferenceException)
            {
                // レジストリ・キーまたは値が存在しない
                Console.WriteLine("レジストリ[" + rKeyName
                  + "]の[" + rGetValueName + "]がありません!");
            }
            return getmode;
        }

コピペできないみたいなんで・・・

///

/// AppsUseLightTheme の値を取得する。
/// ダークモード:0 ライトモード:1 値がないなどのエラー:-1
/// using Microsoft.Win32;()
///

private int GetAppsUseLightTheme()
{
int getmode = -1;

// 操作するレジストリ・キーの名前
string rKeyName = @”Software\Microsoft\Windows\CurrentVersion\Themes\Personalize”;
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = “AppsUseLightTheme”;

// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(rKeyName);

// レジストリの値を取得(DWord)
getmode = (int)rKey.GetValue(rGetValueName);

// 開いたレジストリ・キーを閉じる
rKey.Close();
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine(“レジストリ[” + rKeyName
+ “]の[” + rGetValueName + “]がありません!”);
}
return getmode;
}


        // コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize

        /// 
        /// AppsUseLightTheme の 値からダークモード・ライトモードを取得する。
        /// ダークモード:"Dark" ライトモード:"Light" 値がないなどのエラー:"None"
        /// using Microsoft.Win32;()
        /// 
        private string GetAppsUseThemeMode()
        {
            string getmode = "None";

            // 操作するレジストリ・キーの名前
            string rKeyName = @"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
            // 取得処理を行う対象となるレジストリの値の名前
            string rGetValueName = "AppsUseLightTheme";

            // レジストリの取得
            try
            {
                // レジストリ・キーのパスを指定してレジストリを開く
                Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(rKeyName);

                // レジストリの値を取得(DWord)
                int themee = (int)rKey.GetValue(rGetValueName);

                // 開いたレジストリ・キーを閉じる
                rKey.Close();

                // レジストリの値を
                // Windows10 May 2019はこの値でOK:Theme.Light = 1, Theme.Dark = 0
                getmode = (themee != 1) ? "Light" : "Dark";
            }
            catch (NullReferenceException)
            {
                // レジストリ・キーまたは値が存在しない
                Console.WriteLine("レジストリ[" + rKeyName
                  + "]の[" + rGetValueName + "]がありません!");
            }
            return getmode;
        }
// コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize

///

/// AppsUseLightTheme の 値からダークモード・ライトモードを取得する。
/// ダークモード:”Dark” ライトモード:”Light” 値がないなどのエラー:”None”
/// using Microsoft.Win32;()
///

private string GetAppsUseThemeMode()
{
string getmode = “None”;

// 操作するレジストリ・キーの名前
string rKeyName = @”Software\Microsoft\Windows\CurrentVersion\Themes\Personalize”;
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = “AppsUseLightTheme”;

// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(rKeyName);

// レジストリの値を取得(DWord)
int themee = (int)rKey.GetValue(rGetValueName);

// 開いたレジストリ・キーを閉じる
rKey.Close();

// レジストリの値を
// Windows10 May 2019はこの値でOK:Theme.Light = 1, Theme.Dark = 0
getmode = (themee != 1) ? “Light” : “Dark”;
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine(“レジストリ[” + rKeyName
+ “]の[” + rGetValueName + “]がありません!”);
}
return getmode;
}

取得法によって2種類書いてみた。
コピペできないことのほうが問題だ(;^_^A アセアセ・・・


参考:

クラシック デスクトップ アプリの Windows テーマ追従

クラシック デスクトップ アプリの Windows テーマ追従 | grabacr.nét
Windows には、パーソナライズの一部としてテーマ設定が存在し、アクセント カラーや Light/Dark テーマを選択できます。今回は、クラシック デスクトップ アプリ (主に WPF) において、Windows のテーマ設定に追従す...

.NET TIPS レジストリの値を取得するには?

.NET TIPS レジストリの値を取得するには? - C# VB.NET - @IT