LoginSignup
0
1

More than 1 year has passed since last update.

wpfでテーマカラーやアクセントカラーなどのユーザー情報を取得する

Posted at

前置き

皆さんは設定からダークテーマにしたりだとか、ホワイトテーマにしたりだとか、アクセントカラーを付けたりして、大いにパソコンをカスタマイズしていますよね。
当然、wpfソフトではそこら辺の設定を反映できるようにしたいところです。
ですが、取得方法を探すのに時間がかかったのでメモ書きです。

前提条件

ここで一つ注意なのですが、これはWindows10(10.0.10240.0)から導入されたメソッドなので、ターゲットバージョンをwindows7からwindows10に引き上げなければなりません。
windows7も対象にするという方々は、従来通りDllImportとかしてやってください。最後にメモはしておきます。

取得してみる。

まず、おもむろにプロジェクトのプロパティを開いて、対象をWindows10にします。
これで使えるようになるので

UISettings settings = new UISettings(); // Windows.UI.Color
var foreground = settings.GetColorValue(UIColorType.Foreground);
var background = settings.GetColorValue(UIColorType.Background);
var accentcolor = settings.GetColorValue(UIColorType.Accent);

とかいう感じで適当にコードを打ち込みます。

とかいう公式ドキュメントを見ると分かりますが、
このUIのカラー情報などを取得する以外にも、ダブルクリックの許容時間やらEventやらが多々あり、中々にしっかりしています。
ユーザー情報を取得するなら一番楽だと思います。

UIColorType一覧は上のURLです。参考にしましょう。

アクセントカラーが変更されたら即座に色を変更するのも、ここのイベントハンドラーを使えば行けると思います。

DllImportを使う

これは参考にした人の完全なパクリなので、あまり書きたくはないのですが、まとめておきます。

theme.cs
[DllImport("uxtheme.dll", EntryPoint = "#95")]
public static extern uint GetImmersiveColorFromColorSetEx(uint dwImmersiveColorSet, uint dwImmersiveColorType, bool bIgnoreHighContrast, uint dwHighContrastCacheMode);
[DllImport("uxtheme.dll", EntryPoint = "#96")]
public static extern uint GetImmersiveColorTypeFromName(IntPtr pName);
[DllImport("uxtheme.dll", EntryPoint = "#98")]
public static extern int GetImmersiveUserColorSetPreference(bool bForceCheckRegistry, bool bSkipCheckOnFail);

public Color GetThemeColor() // アクセントカラー取得
{
    var colorSetEx = GetImmersiveColorFromColorSetEx(
        (uint)GetImmersiveUserColorSetPreference(false, false),
        GetImmersiveColorTypeFromName(Marshal.StringToHGlobalUni("ImmersiveStartSelectionBackground")), 
        false, 0);

    var colour = Color.FromArgb((byte)((0xFF000000 & colorSetEx) >> 24), (byte)(0x000000FF & colorSetEx),
        (byte)((0x0000FF00 & colorSetEx) >> 8), (byte)((0x00FF0000 & colorSetEx) >> 16));

    return colour;
}

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1