我想要做的是,如果用户单击按钮,则会永久禁用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都会重新启动。
有没有办法阻止这种情况?
答案 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)