.Net - 检测外观设置(Classic或XP?)

时间:2008-08-29 16:50:23

标签: vb.net windows-xp appearance

我在VB 2005中有一些UI在XP Style中看起来很棒,但在经典风格中却很可怕。

有关如何检测用户所处的模式以及动态重新格式化表单的任何想法?


发布答案编辑:

谢谢Daniel,看起来这样可行。我正在使用您使用GetCurrentThemeName()函数发布的第一个解决方案。

我正在做以下事情:

功能声明:   

 Private Declare Unicode Function GetCurrentThemeName Lib "uxtheme" (ByVal stringThemeName As System.Text.StringBuilder, ByVal lengthThemeName As Integer, ByVal stringColorName As System.Text.StringBuilder, ByVal lengthColorName As Integer, ByVal stringSizeName As System.Text.StringBuilder, ByVal lengthSizeName As Integer) As Int32

代码正文:


Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)

GetCurrentThemeName(stringThemeName, 260, stringColorName, 260, stringSizeName, 260) MsgBox(stringThemeName.ToString)

当我处于Windows经典样式/主题时,MessageBox出现空,如果是Windows XP样式/主题,则出现“C:\ WINDOWS \ resources \ Themes \ luna \ luna.msstyles”。我将不得不再做一些检查,看看如果用户设置的另一个主题比这两个主题会发生什么,但不应该是一个大问题。

3 个答案:

答案 0 :(得分:2)

尝试结合使用GetCurrentThemeNameMSDN Page)和DwmIsCompositionEnabled

我将第一个链接到PInvoke,以便您可以将它放在代码中,对于第二个,您可以使用MSDN注释中提供的代码:

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();

看看你从这两个功能中得到什么结果;它们应该足以确定您何时想要使用不同的主题!

答案 1 :(得分:1)

就个人而言,我使用以下内容查看该应用是否在主题下运行:

if (Application.RenderWithVisualStyles)
{
    // you're themed
}

答案 2 :(得分:0)

IsThemeActive WinAPI功能。