我有一些用户界面,在VB2005年,看起来不错在XP风格,而是可怕的古典样式。

任何想法,如何检测模式的用户是在和重新格式化形式上的飞?


后答复编辑:

谢谢你丹尼尔,看起来这样会的工作。我使用的是第一个解决方案,发布与GetCurrentThemeName()function.

我做的如下:

功能的声明:

 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)

该消息框配上空的时候我在窗户的古典样式/主题,并提出了"C:\WINDOWS esources hemes\luna\luna.msstyles"如果它是Windows XP样的主题。我必须做的更多一点的检查,看看会发生什么,如果用户设定的另一个主题比这两个,但不应该是一个大问题。

有帮助吗?

解决方案

尝试使用一个组合 GetCurrentThemeName (MSDN页)和 DwmIsCompositionEnabled

我相联系的第一个PInvoke所以你可以把它放在你的代码,并为第二个你可以使用代码提供MSDN评论:

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

看看你得到什么结果这两个职能;他们应足以确定当你想使用一个不同的主题!

其他提示

就个人而言,我使用的以下看到,如果应用程序正在运行以下主题:

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

还有 IsThemeActive WinAPI功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top