运行 程序中使用的 Win10 主题

Win10 Theme used in running program

运行 程序是否有关于正在使用哪个 Win10 主题的任何信息?

我主要是想获得更多调试信息,因为我有一个用户报告了 "scrambled GUI"。

有什么方法可以从 运行 程序中终止主题或强制使用默认主题?

如果我正确理解您的问题,我会建议您使用 SetWindowTheme

您应该查看上面 link 提供的信息,看看 docs.microsoft(以前的 msdn)在 Remark 部分告诉我们什么:

When pszSubAppName and pszSubIdList are NULL, the theme manager removes the previously applied associations. You can prevent visual styles from being applied to a specified window by specifying an empty string, (L" "), which does not match any section entries.

因此,考虑到这一点,您可以轻松地限制任何 window 的主题,这些 Handle 通过调用 SetWindowTheme 并将两个参数设置为“”大括号之间应该有空格”。

顺便说一句,我强烈不建议从您的应用程序中删除整个 OS 的主题。就个人而言,我会删除任何具有这种有用功能的软件。

重要补充!

过了一段时间我又看了你的问题,我可以回答你问题的第一部分。
您可以通过 UXTheme 单元获取主题信息。

主要你必须使用这两个功能:

  1. GetCurrentThemeName
  2. GetThemeDocumentationProperty

下面是一些演示如何执行此操作的代码。

uses
  ..., UXTheme;

var
  ThemeName: Array[0..512] of Char;
  ThemeColorScheme: Array[0..512] of Char;
  ThemeSizeName: Array[0..512] of Char;
  PropertyName: Array[0..512] of Char;
begin
  UXTheme.GetCurrentThemeName(@ThemeName, SizeOf(ThemeName), @ThemeColorScheme, SizeOf(ThemeColorScheme), @ThemeSizeName, SizeOf(ThemeSizeName));
  UXTheme.GetThemeDocumentationProperty(@ThemeName, SZ_THDOCPROP_CANONICALNAME, @PropertyName, SizeOf(PropertyName));
end;  

请仔细阅读 GetThemeDocumentationProperty - 此函数采用一个参数,负责 OS 主题的 属性 将是 return。根据 docs.microsoft,上面代码中的标志 SZ_THDOCPROP_CANONICALNAME 将为

return 字符串 属性

Retrieves the name of the theme.

这样您就可以查看当前正在使用的主题。
但是您仍然可以为自己的应用程序禁用主题。