Home All Groups Group Topic Archive Search About

Detect if Themes are enabled?

Author
16 May 2006 11:16 AM
Fred Hedges
Using .NET 1.1, I need to be able to detect if Themes are enabled or
disabled, not for a specific application, but for the system as a whole (ie.
the current user).  The reason I need to be able to do this is because of
this bug in MFC http://support.microsoft.com/?kbid=319740, which is used to
build a component I am in turn making use of.  So, I need to detect if
Themes are running and if so, see if the correct version of uxtheme.dll is
installed, else disallow a certain operation.

Any hints?

Author
16 May 2006 11:38 AM
Fred Hedges
I solved this using the code below, I hope it's more or less correct:


Dim myVersion As Version =
OSFeature.Feature.GetVersionPresent(OSFeature.Themes)

If not myVersion Is Nothing Then

    Return True

Else

    Return False

End If


Show quoteHide quote
"Fred Hedges" <dontlike@spammuch.com> escribió en el mensaje
news:e4ccba$o9e$1$8300dec7@news.demon.co.uk...
> Using .NET 1.1, I need to be able to detect if Themes are enabled or
> disabled, not for a specific application, but for the system as a whole
> (ie. the current user).  The reason I need to be able to do this is
> because of this bug in MFC http://support.microsoft.com/?kbid=319740,
> which is used to build a component I am in turn making use of.  So, I need
> to detect if Themes are running and if so, see if the correct version of
> uxtheme.dll is installed, else disallow a certain operation.
>
> Any hints?
>
>
Author
16 May 2006 11:51 AM
Ken Tucker [MVP]
Fred,

           That is a good method.

Ken
-----------------

Show quoteHide quote
"Fred Hedges" wrote:

>
> I solved this using the code below, I hope it's more or less correct:
>
>
> Dim myVersion As Version =
> OSFeature.Feature.GetVersionPresent(OSFeature.Themes)
>
> If not myVersion Is Nothing Then
>
>     Return True
>
> Else
>
>     Return False
>
> End If
>
>
> "Fred Hedges" <dontlike@spammuch.com> escribió en el mensaje
> news:e4ccba$o9e$1$8300dec7@news.demon.co.uk...
> > Using .NET 1.1, I need to be able to detect if Themes are enabled or
> > disabled, not for a specific application, but for the system as a whole
> > (ie. the current user).  The reason I need to be able to do this is
> > because of this bug in MFC http://support.microsoft.com/?kbid=319740,
> > which is used to build a component I am in turn making use of.  So, I need
> > to detect if Themes are running and if so, see if the correct version of
> > uxtheme.dll is installed, else disallow a certain operation.
> >
> > Any hints?
> >
> >
>
>
>
Author
16 May 2006 11:55 AM
Fred Hedges
To continue this conversation with myself, the above didn't work, because it
checks to see if the feature is present, not whether or not it is currently
switched on/off.  I am still looking for a way to see if the user is using a
Theme (other than the stock "Classic Windows", which isn't really a Theme,
it's more the way things were before MS botched up it's themes
implementation).


Show quoteHide quote
"Fred Hedges" <dontlike@spammuch.com> escribió en el mensaje
news:e4cdio$qgf$1$8300dec7@news.demon.co.uk...
>
> I solved this using the code below, I hope it's more or less correct:
>
>
> Dim myVersion As Version =
> OSFeature.Feature.GetVersionPresent(OSFeature.Themes)
>
> If not myVersion Is Nothing Then
>
>    Return True
>
> Else
>
>    Return False
>
> End If
>
>
> "Fred Hedges" <dontlike@spammuch.com> escribió en el mensaje
> news:e4ccba$o9e$1$8300dec7@news.demon.co.uk...
>> Using .NET 1.1, I need to be able to detect if Themes are enabled or
>> disabled, not for a specific application, but for the system as a whole
>> (ie. the current user).  The reason I need to be able to do this is
>> because of this bug in MFC http://support.microsoft.com/?kbid=319740,
>> which is used to build a component I am in turn making use of.  So, I
>> need to detect if Themes are running and if so, see if the correct
>> version of uxtheme.dll is installed, else disallow a certain operation.
>>
>> Any hints?
>>
>>
>
>
Author
16 May 2006 11:52 AM
Stanimir Stoyanov
Hi Fred,

You can use UxTheme's IsThemActive() API, available in Windows XP (NT 5.1)
and later.

<System.Runtime.InteropServices.DllImport("UxTheme")> _
Public Shared Function IsThemeActive() as Boolean
End Function

After the P/Invoke function is defined in the appropriate scope, you can
call it provided that the Operating System's version is at least Windows XP:

Dim fThemesActive As Boolean = False
If Environment.OSVersion.Version >= New Version(5, 1) Then
    fThemesActive = IsThemeActive()
End If

--
Stanimir Stoyanov
www.stoyanoff.info


Show quoteHide quote
"Fred Hedges" wrote:

> Using .NET 1.1, I need to be able to detect if Themes are enabled or
> disabled, not for a specific application, but for the system as a whole (ie.
> the current user).  The reason I need to be able to do this is because of
> this bug in MFC http://support.microsoft.com/?kbid=319740, which is used to
> build a component I am in turn making use of.  So, I need to detect if
> Themes are running and if so, see if the correct version of uxtheme.dll is
> installed, else disallow a certain operation.
>
> Any hints?
>
>
>
Author
16 May 2006 12:05 PM
Fred Hedges
Thats the one!  Thanks.

Public Declare Auto Function IsThemeActive Lib "uxtheme.dll" () As Boolean






Show quoteHide quote
"Stanimir Stoyanov" <admin{at}stoyanoff{dot}info> escribió en el mensaje
news:278C2F44-B487-4A31-94C8-3B845BB384DF@microsoft.com...
> Hi Fred,
>
> You can use UxTheme's IsThemActive() API, available in Windows XP (NT 5.1)
> and later.
>
> <System.Runtime.InteropServices.DllImport("UxTheme")> _
> Public Shared Function IsThemeActive() as Boolean
> End Function
>
> After the P/Invoke function is defined in the appropriate scope, you can
> call it provided that the Operating System's version is at least Windows
> XP:
>
> Dim fThemesActive As Boolean = False
> If Environment.OSVersion.Version >= New Version(5, 1) Then
> fThemesActive = IsThemeActive()
> End If
>
> --
> Stanimir Stoyanov
> www.stoyanoff.info
>
>
> "Fred Hedges" wrote:
>
>> Using .NET 1.1, I need to be able to detect if Themes are enabled or
>> disabled, not for a specific application, but for the system as a whole
>> (ie.
>> the current user).  The reason I need to be able to do this is because of
>> this bug in MFC http://support.microsoft.com/?kbid=319740, which is used
>> to
>> build a component I am in turn making use of.  So, I need to detect if
>> Themes are running and if so, see if the correct version of uxtheme.dll
>> is
>> installed, else disallow a certain operation.
>>
>> Any hints?
>>
>>
>>
Author
16 May 2006 1:08 PM
Herfried K. Wagner [MVP]
"Fred Hedges" <dontlike@spammuch.com> schrieb:
> Public Declare Auto Function IsThemeActive Lib "uxtheme.dll" () As Boolean

Remove the 'Auto' keyword.

--
M S   Herfried K. Wagner
M V P  <URL:http://dotnet.mvps.org/>
V B   <URL:http://classicvb.org/petition/>