【问题标题】:How to determine if High Contrast theme is on in Windows 10? [closed]如何确定 Windows 10 中是否开启了高对比度主题? [关闭]
【发布时间】:2016-06-21 20:38:33
【问题描述】:

在 Windows 10 中,高对比度主题是唯一在边框方面与默认 Windows 10 主题不同的主题。

为此,我想检测用户是否在 Windows 10 中使用高对比度主题。

【问题讨论】:

  • 请注意,高对比度模式和高对比度主题是不同的概念。如果您处于高对比度模式,您可能正在使用一些高对比度主题。但也可以选择高对比度主题而不实际处于高对比度模式。 blogs.msdn.microsoft.com/oldnewthing/20081203-00/?p=19983
  • @AdrianMcCarthy - 这是一个很好的观点,你会反对我在我的答案中添加一个注释吗?
  • 我实际上需要发现我们是否有高对比度主题,而不是模式。我会编辑我的问题。编辑:这样做的原因是无法获取默认 windows 10 主题中阴影区域的宽度,而 windows 10 中的高对比度主题是唯一没有阴影的主题。
  • 我正在尝试这样做stackoverflow.com/questions/32159675/…,除了 DwmGetAttribute 总是给我与 GetWindowRect 相同的大小,所以我打算在 Windows 10 的情况下破解,我注意到默认情况下的高对比度模式是唯一没有阴影的模式。
  • @HansPassant 的意思是您的原始问题 已回答,现在您正尝试更改问题。这对已经回答过的人不公平,对以后遇到这个问题的人也很不公平。关闭此问题并提出另一个问题。

标签: c++ windows windows-10 dwm windows-themes


【解决方案1】:

确定系统当前是否处于高对比度模式的方法是使用SystemParametersInfo 获取包含您需要的所有信息的HIGHCONTRAST 结构。

一个简单的例子:

HIGHCONTRAST info = { 0 };
info.cbSize = sizeof(HIGHCONTRAST);
BOOL ok = SystemParametersInfoW(SPI_GETHIGHCONTRAST, 0, &info, 0);

if (ok)
{
    if (info.dwFlags & HCF_HIGHCONTRASTON)
    {
        wcout << L"High Contrast On" << endl;
    }
    else
    {
        wcout << L"High Contrast Off" << endl;
    }
}

有关其他可用标志的信息,请参阅HIGHCONTRAST 的文档。

【讨论】:

    【解决方案2】:

    我们可以使用AccessibilitySettings 类来获得高对比度的信息。并使用AccessibilitySettings.HighContrast表示系统高对比度功能是开启还是关闭。

    例如:

    Windows::UI::ViewManagement::AccessibilitySettings^ accessibilitySettings = ref new Windows::UI::ViewManagement::AccessibilitySettings;
    Boolean ishighcontrast = accessibilitySettings->HighContrast;
    

    【讨论】:

    • 在我看来这不像 C++。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多