2016-06-12 12 views
0

私はユーザーのウィンドウテーマ(フォームの背景、テキストの色など)の色のテーマを持つアプリケーションを作成しようとしていますC#:Windows 8.1/10で選択されたカラーテーマを取得しますか?

ユーザーが自分のWin 8.1/10で選択した#colorを取得できますか?

私は、この特定の設定について話しています:

​​

+1

を参照してください。 [この正しいコード](https://code.msdn.microsoft.com/windowsdesktop/How-to-get-Accent-brush-6652403f)から最も明白です。 –

+0

ハンスは正しいですが、まだ文書化されていません。なぜあなたが知りたくないのか理解できません。 Microsoftは、最近、一貫性のあるUI体験から、ますます遠ざかっているように思えます。ああ、今私たちの独立したアプリの開発者は、それについて何かをして、私たちのアプリを使いやすいものにすることができます。これらのことに注意を払い、これをしようとしていただきありがとうございます。 –

+0

"彼らはあなたが知りたがっていない" == "それは変わるだろう"。これはまばゆい色です。マイクロソフトはジョーンズに追いつくためにそれを見栄えのままにしなければならない。次のバージョンは非常に異なって見えるだろう。この色は使用しません。 –

答えて

0

これはまた、ハンスアンパッサンは、上記掲載linkに基づいて、私が作成した例です。 別の同様のアプローチは、GitHubの上で見つけることができます彼らはあなたが知っている必要はありませんAccentColorService

public class ThemeInfo 
{ 
    [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; 
    } 
} 
関連する問題