Windows 7 如何判断是否启用AERO

Windows 7 如何判断是否启用AERO
How to get Windows 7 aero state

最近在使用AHK弄一个小玩意的时候,意外发现了一个Bug(不知道是Win7引起的还是AHK引起的),而为了避免这个Bug,经过无数次的研究判断,得出的唯一解决办法就是——避免在Win 7启用了AERO主题环境中使用该功能。

然而,找到原因和想好了解决办法,解决起来却又是另一回事了。

经过一番百度和Google,虽然有通过Windows API来获取的方法,但是还是太麻烦,毕竟还是需要编程去调用API来获取。

于是傻人有傻办法

通过来回切换主题,然后监控注册表的办法,发现仅通过注册表的几项值的判断,就可以方便的得知aero是不是在使用了。

方法很简单,只需要检查注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\下的Composition、ColorizationOpaqueBlend、EnableAeroPeek这三个值,便可以区分aero的启用情况了。

当然,最好结合Theme主题服务的运行情况,以及当前使用主题去判断,会更加准确。

因为如果有人简单粗暴的在使用aero主题时,直接将服务停用,仅判断上述注册表的三个值,还是会引起误判的。

下面就贴上AHK的判断源码以及打包好的可执行程序,以作测试。

msgbox, % GetAeroState(A_OSVersion) . "。仅限Win7系统判断,您系统为" . A_OSVersion
return

GetAeroState(Windows_OS)
{
if (Windows_OS=”WIN_7″)
{
RegRead, IsServicesEnable, HKEY_LOCAL_MACHINE, SYSTEM\CurrentControlSet\services\Themes, Start
if (IsServicesEnable=2)
{
RegRead, CurrentTheme, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Themes, CurrentTheme
IfInString, CurrentTheme, basic.theme
{
Return “肯定是Windows Basic主题”
}
else
{
IfInString, CurrentTheme, classic.theme
{
Return “肯定是Windows 经典主题”
}
else
{
RegRead, Composition, HKEY_CURRENT_USER, Software\Microsoft\Windows\DWM, Composition
RegRead, ColorizationOpaqueBlend, HKEY_CURRENT_USER, Software\Microsoft\Windows\DWM, ColorizationOpaqueBlend
RegRead, EnableAeroPeek, HKEY_CURRENT_USER, Software\Microsoft\Windows\DWM, EnableAeroPeek
if (!Composition&&!ColorizationOpaqueBlend&&EnableAeroPeek)
Return “可能是Windows Basic主题修改版”
if (!Composition&&ColorizationOpaqueBlend&&EnableAeroPeek)
Return “可能是Windows 经典主题修改版”
if (Composition&&!ColorizationOpaqueBlend&&EnableAeroPeek)
Return “应该就是Aero主题了”
if (Composition&&ColorizationOpaqueBlend&&EnableAeroPeek)
Return “应该就是Aero主题然后禁用掉了透明”
}
}
}
else
{
Return “已禁用或停用服务”
}
}
else
{
Return “非Win7”
}
}

下载地址:
判断是否开启aero

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注