使用 vb.net 永久禁用 Windows Aero

Permanently disable Windows Aero using vb.net

我想做的是在用户单击按钮时永久禁用 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 透明度。

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

此外,来自 link:https://msdn.microsoft.com/en-us/library/windows/desktop/aa969510%28v=vs.85%29.aspx

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

所以在我看来你需要离开你的程序 运行。你可以做一些事情,比如将它最小化到任务托盘(而不是退出它)。谁知道呢,也许您甚至可以只启动一个单独的可执行文件,它保持 运行 并且不会出现在任务栏或任务托盘中。但是你将不得不离开进程 运行.

如果您希望为用户禁用 Aero "PERMANENTLY",而不管您的应用是否 运行ning,那么您需要确定此设置在注册表中的位置,并且修改该设置。

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

在项目设置中创建一个新的 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

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

DwmEnableComposition(My.Settings.DWM)