运行程序中使用的Win10主题

时间:2018-08-26 01:08:47

标签: delphi delphi-10.1-berlin windows-10-desktop

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

我主要是希望获得更多调试信息,因为我的用户使用的是“加扰的GUI”。

是否有任何方法可以从正在运行的程序中杀死主题或强制使用默认主题?

1 个答案:

答案 0 :(得分:2)

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

您应该查看上面链接提供的信息,以查看docs.microsoft部分中的msdn(以前的Remark)告诉我们的内容:

  

当pszSubAppName和pszSubIdList为NULL时,主题管理器将删除以前应用的关联。您可以通过指定与任何节条目都不匹配的空字符串(L“”)来防止将视觉样式应用于指定的窗口。

因此,考虑到这一点,您可以通过调用Handle并将两个参数都设置为“ 大括号之间应该有空格”。

通过这种方式,我强烈不建议您从应用程序中终止整个操作系统的主题。就个人而言,我删除所有具有有用功能的软件。

重要的附录!

一段时间后,我再次阅读了您的问题,我可以回答您问题的第一部分。
您可以通过SetWindowTheme单位获取主题信息。

主要,您必须使用以下两个功能:

  1. GetCurrentThemeName
  2. GetThemeDocumentationProperty

下面是一些代码,显示了如何执行此操作。

UXTheme

请仔细阅读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; -此函数采用一个负责返回OS主题的属性的参数之一。根据{{​​1}},以上代码中的标志GetThemeDocumentationProperty将返回

的字符串属性。
  

检索主题名称。

因此,您将能够检查当前正在使用的主题。
但是您仍然可以只为自己的应用程序禁用主题。