使用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就会重新打开。

有办法防止这种情况吗?

听起来windows 8的空气透明度是默认禁用的。

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组合将禁用整个桌面。当所有禁用合成的进程调用dwmenableccomposition来启用它或被终止时,DWM合成将自动启用。 WM_DWMCOMPOSITIONCHANGED通知在启用或禁用DWM合成时发送。

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

如果你想让Aero为用户永久禁用,无论你的应用程序是否运行,那么你需要确定这个设置在注册表中的位置,并修改该设置。

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

在项目设置中创建一个新的bool设置(user-scope)并将其命名为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)

相关内容

  • 没有找到相关文章

最新更新