使用vb.net永久禁用Windows Aero

时间:2015-05-25 15:04:02

标签: vb.net windows aero

我想要做的是,如果用户单击按钮,则会永久禁用Windows aero。

目前我有这段代码:

<System.RunTime.InteropServices.DLLImport("dwmapi.dll", PreserveSig:=False)>
Public Shared Sub DwmEnableComposition(bEnable As Boolean)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    DwmEnableComposition(False)
End Sub

此代码的当前问题是......它可以正常工作,但每当您退出应用程序时,Aero都会重新启动。

有没有办法阻止这种情况?

2 个答案:

答案 0 :(得分:0)

听起来像在Windows 8中,默认情况下禁用了aero透明度。

http://www.howtogeek.com/howto/windows-vista/disable-aero-on-windows-vista/

另外,从链接:https://msdn.microsoft.com/en-us/library/windows/desktop/aa969510%28v=vs.85%29.aspx

禁用DWM组合会为整个桌面禁用它。 当具有已禁用合成的所有进程都已调用DwmEnableComposition以启用它或已终止时,将自动启用DWM组合。只要启用或禁用DWM组合,就会发送WM_DWMCOMPOSITIONCHANGED通知。

所以听起来像是你需要让你的程序继续运行。你可以做一些事情,比如将它最小化到任务托盘(而不是退出它)。谁知道,也许您甚至可以启动一个单独的可执行文件,该文件仍然在运行,并且不会显示在任务栏或任务栏中。但是你必须让这个过程继续运行。

答案 1 :(得分:0)

如果您希望用户“永久”禁用Aero,无论您的应用是否正在运行,那么您需要确定此设置在注册表中的位置并修改该设置。

如果您的意思是您只想为您的应用程序禁用它(意味着下次启动应用程序时,它将根据上次关闭时的设置启用或禁用),然后您将需要将其存储在用户设置中。

在项目设置中创建一个新的bool设置(用户范围)并将其命名为DWM。然后,在按钮单击事件中切换它的值。在运行时将该值应用于该设置。

编辑:以前的版本会导致始终为假设置。 我已将If语句编辑为If-Else块。

<System.RunTime.InteropServices.DLLImport("dwmapi.dll", PreserveSig:=False)>
Public Shared Sub DwmEnableComposition(bEnable As Boolean)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If My.Settings.DWM = False THEN 
        My.Settings.DWM = True
    Else
        My.Settings.DWM = False
    End If
    My.Settings.Save()
    DwmEnableComposition(My.Settings.DWM)
End Sub

在表单/ app的onload或startup事件中,运行代码以设置true或false

DwmEnableComposition(My.Settings.DWM)