Search code examples
.netthemeswindows-themes

Get Windows theme?


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


Solution

  • 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.