使用vb.net永久禁用Windows Aero

使用vb.net永久禁用Windows Aero,vb.net,windows,aero,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 EventA

我想做的是,如果用户单击按钮,则永久禁用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都会重新打开


有没有办法防止这种情况发生?

这听起来像是在windows 8中,默认情况下禁用了aero transparency

此外,从链接:

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


所以我觉得你需要让你的程序继续运行。您可以将其最小化到任务托盘,而不是退出它。谁知道呢,也许你甚至可以启动一个单独的可执行文件,它保持运行,不会出现在任务栏或任务托盘中。但是您必须让进程保持运行状态。

如果您想让用户永久禁用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

您需要将设置保存到某个位置,在启动时读取设置,如果设置为真,则禁用设置。我可以将其保存到计算机,并在应用程序启动时读取。但那不是我要找的!我需要的是,如果单击该按钮,Windows Aero将始终处于禁用状态。除非用户返回应用程序并单击按钮再次启用Aero。否则您的措辞很难理解。关闭应用程序是什么意思?仅供参考:注意,从Windows 8开始,此功能已被弃用。DWM不能再以编程方式禁用。我说的是退出应用程序。。。A.k.A使用代码“End”关闭应用程序或“application.exit”。
DwmEnableComposition(My.Settings.DWM)