如何检测Windows 10亮/暗模式?

如何检测Windows 10亮/暗模式?,windows,uwp,windows-10-universal,Windows,Uwp,Windows 10 Universal,我正在使用Windows.UI.ViewManagement.UISettings来获取系统强调色,但是这个类似乎没有任何用于亮/暗模式的方法或属性。我找不到此功能的文档,如何检测此功能 PS:我正在制作一个JS应用程序,它不能访问Windows.UI.Xaml命名空间。在8.1中引入了这些资源,它们的行为在W10中类似。因此,您可以在负责可用主题的主题词典中定义合适的资源,然后在不知道当前使用的主题时检查定义的资源 该代码将与中的代码非常相似。在Windows周年纪念更新之前,您不能这样做。应

我正在使用
Windows.UI.ViewManagement.UISettings
来获取系统强调色,但是这个类似乎没有任何用于亮/暗模式的方法或属性。我找不到此功能的文档,如何检测此功能

PS:我正在制作一个JS应用程序,它不能访问
Windows.UI.Xaml
命名空间。

在8.1中引入了这些资源,它们的行为在W10中类似。因此,您可以在负责可用主题的主题词典中定义合适的资源,然后在不知道当前使用的主题时检查定义的资源


该代码将与中的代码非常相似。

在Windows周年纪念更新之前,您不能这样做。应用程序主题始终是您在
App.xaml
文件中设置的主题:

<Application
  ...
  RequestedTheme="Dark">
</Application>

的值,因为这将使您了解当前设置的主题。

您可以在解决方案中创建一个Windows运行时组件项目,从该项目访问
Windows.UI.Xaml
命名空间。添加一个方法来检查当前应用程序,如下所示

public sealed class Test
{
    public static string CurrentTheme()
    {
        var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;

        if (isDark)
            return "Dark";

        return "Light";
    }
}

在javascript应用程序项目中添加对windows运行时组件项目的引用,您可以在任何需要检查应用程序主题的地方调用此方法。查看有关创建Windows运行时组件的演练。

我找到了一个更简单的解决方案,该解决方案也可以在JavaScript应用程序中使用,而不需要Windows运行时组件-即:

对于深色主题,您可以选择黑色,对于浅色主题,您可以选择白色


该类还有非常有用的事件
ColorValuesChanged
,您可以使用该事件来更改它。

对于Windows 10,注册表路径
HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize
中的
AppsUseLightTheme
属性的值指定Windows处于暗模式或亮模式的位置。

如果要在PowerShell中获取值,可以使用以下代码:

(New-Object Windows.UI.ViewManagement.UISettings).GetColorValue("background")

似乎这个解决方案只适用于XAML应用程序。没有针对HTML应用程序的解决方案?@KagamiSaschaRosylight我现在很少使用HTML,但也许你可以做类似的事情。我需要一个同样适用于HTML的解决方案,但遗憾的是,这个解决方案似乎只适用于XAML应用程序。在JavaScript中如何工作?例如,从命令行使用
wscript
?AppsUseLightTheme(REG_DWORD):0=暗模式,1=亮模式请注意
AppsUseLightTheme
值可能完全丢失。在这种情况下,您应该返回到灯光模式。(发生在我身上的是一个较旧的Windows 10系统;该系统附带了来自Microsoft自身的IE测试VM映像)。
(New-Object Windows.UI.ViewManagement.UISettings).GetColorValue("background")