Normally when we double click on a themepack file it is applied on our system and a corresponding folder with the same name as the themepack is saved in
C:\Users\<username>\AppData\Local\Microsoft\Windows\Themes
Now if I have multiple themepack files and I have applied each of them at least once, then all the themepacks will have a corresponding folder in the Themes folder. Now I want to know which particular theme is applied on my machine, programmatically.
(When we use a themepack file Custom.theme file is not updated)
I'm pretty sure there's no API that can retrieve that information. Which makes sense, it isn't really relevant. An application never needs to know the name of the theme pack that the user selected.
What you can get using an API, and what is useful, is the name and properties of the theme that the user has enabled. For example, calling the GetCurrentThemeName() function and/or the GetThemeDocumentationProperty() function.aspx) with SZ_THDOCPROP_DISPLAYNAME will tell you whether the user has enabled the Aero theme or not. Or if they're using a custom theme that is not Aero. Just to be sure, though, I tested it, and neither of those functions returns the name of my currently selected theme pack.
However, you can read the registry to obtain the information you desire. Find it in the following location:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\CurrentTheme
That value will contain a string corresponding to the full path to the currently selected theme pack, e.g.:
C:\Users\billg\AppData\Local\Microsoft\Windows\Themes\Pink Polka Dots.theme
If you want, you can strip out the path spec and extension, using just the file name as the name of the theme pack, e.g. Pink Polka Dots.
But that isn't a complete solution because it doesn't take localization into account. Especially with system-provided theme packs, the file name is going to be in English, but the name of the theme pack is going to be localized in the UI. The user sees something different when they pick themes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With