获取 Windows 主题?

发布于 2024-10-08 20:50:32 字数 387 浏览 7 评论 0原文

我必须真正知道我的用户正在使用哪个 Windows 主题。
更准确地说,是 Classic、XP、Basic 或 Aero。 (基本主题与 Vista/7 Windows 基本主题相同)
我已经知道如何找到它是否是空气动力的,但是其他的呢?


答案可以是任何 .NET 语言(C#、VB.NET 或 C++)。


如果您真的必须知道为什么我需要知道主题,那么您就可以:
我在表单标题上有一些浮动按钮,我需要根据 Windows 主题更改它们的外观。
到目前为止,我已经找到了 Aero/Classic。


解决问题后的结果屏幕截图: 最小化到托盘按钮

I must really know which Windows theme my user is using.
More precisely, Classic, XP, Basic or Aero. (Basic theme as in Vista/7 Windows Basic theme)
I already know how to find if it's aero, but how about the others?


The answer can be in any .NET language (C#, VB.NET or C++).


If you really have to know why on Earth I need to know the theme then here you go:
I have some floating buttons over the caption of a form and I need to change their appearance according to the windows theme.
So far I've managed to find Aero/Classic.


Screen shots of the result, after solving the issue:
Minimize to tray button

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫七 2024-10-15 20:50:32

您可以在以下位置检查当前主题的注册表:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes,

位于字符串“CurrentTheme”下,其中包含当前主题的路径。
下面是在 C# 中检查它的代码。

using Microsoft.Win32;

public string GetTheme()
{
  string RegistryKey = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes";
  string theme;
  theme = (string) Registry.GetValue(RegistryKey, "CurrentTheme", string.Empty);
  theme = theme.Split('\\').Last().Split('.').First().ToString();
  return theme;
}

You can check the registry for the current theme at:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes

under String "CurrentTheme" which has the path to the current theme.
below is the code for checking it in C#.

using Microsoft.Win32;

public string GetTheme()
{
  string RegistryKey = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes";
  string theme;
  theme = (string) Registry.GetValue(RegistryKey, "CurrentTheme", string.Empty);
  theme = theme.Split('\\').Last().Split('.').First().ToString();
  return theme;
}
落日海湾 2024-10-15 20:50:32

您可以通过调用 IsAppThemed/IsThemeActive 然后检查Aero 通过调用 DwmIsCompositionEnabled。很可能还有其他方法可以做到这一点!

编辑

逻辑是:

  1. 我可以导入 IsAppThemedIsThemeActive 吗?如果不是,那么我必须使用 Windows Classic(Win9x 或 Win2k)。
  2. IsAppThemed 和 IsThemeActive 返回什么?如果为 false,那么我一定使用的是 Windows Classic。
  3. 我可以导入 DwmIsCompositionEnabled 吗?如果不是的话我一定是XP主题的。
  4. DwmIsCompositionEnabled 返回什么?如果属实,那么我是 Aero,否则我是 Windows Basic。

You can check whether themes are active by calling IsAppThemed/IsThemeActive and then check for Aero by calling DwmIsCompositionEnabled. There may well be other ways of doing this!!

EDIT

The logic would be:

  1. Can I import IsAppThemed and IsThemeActive? If no then I must be in Windows Classic (Win9x or Win2k).
  2. What does IsAppThemed and IsThemeActive return? If false then I must be in Windows Classic.
  3. Can I import DwmIsCompositionEnabled? If no then I must be XP themed.
  4. What does DwmIsCompositionEnabled return? If true then I am Aero, otherwise I am Windows Basic.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文