2016-06-12 33 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

漢斯是對的,它仍然沒有記錄。我不明白他們爲什麼不想讓你知道。目前,微軟似乎正在越來越多地從一致的用戶體驗中獲益,這一直是他們最大的優勢。哦,現在是由我們獨立的應用程序開發人員來做些什麼來保持我們的應用程序用戶友好。感謝您關注這些事情並努力做到這一點。 –

+0

「他們不希望你知道」==「它會改變」。這是一種眼睛糖果的顏色。微軟必須保持它跟上Joneses的腳步,下一個版本看起來會非常不同。並且不會使用這種顏色。 –

回答

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