Тема Win10, используемая в запущенной программе - PullRequest
0 голосов
/ 26 августа 2018

Доступна ли какая-либо информация для запущенной программы о том, какая тема Win10 используется?

Я ищу в первую очередь больше отладочной информации, так как у меня есть пользователь с сообщенным "зашифрованным графическим интерфейсом".

Есть ли способ убить темы или заставить их использовать тему по умолчанию из запущенной программы?

1 Ответ

0 голосов
/ 26 августа 2018

Если я правильно понял ваш вопрос, я бы порекомендовал вам использовать SetWindowTheme .

Вы должны проверить информацию, предоставленную по ссылке выше, чтобы увидеть, что docs.microsoft (прежнее msdn) говорит нам в разделе Remark:

Когда pszSubAppName и pszSubIdList равны NULLменеджер тем удаляет ранее примененные ассоциации.Вы можете предотвратить применение визуальных стилей к указанному окну, указав пустую строку (L ""), которая не соответствует ни одной записи раздела.

Таким образом, имея это в виду, вы можете легко ограничить тематику для любого окна, для которого Handle известно, вызывая SetWindowTheme с обоими аргументами, установленными на ", между скобками должен быть пробел».

Кстати, я бы не советовал убивать темы для всей ОС из вашего приложения.Лично я удаляю любую программу, которая имеет такую ​​полезную функцию .

Важное дополнение!

Через некоторое время я снова прочитал ваш вопрос и могу ответить на первую часть вашего вопроса.
Вы можете получитьинформация о теме через 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 - эта функция принимает один из аргументов, отвечающий за то, какое свойство темы ОС будет возвращено.Согласно docs.microsoft, флаг SZ_THDOCPROP_CANONICALNAME в приведенном выше коде вернет строковое свойство для

Извлекает название темы.

Таким образом, вы сможете проверить, какая тема используется в данный момент.
Но вы все равно можете просто отключить темы для своего собственного приложения.

...