C# 如何确保启用空气动力学效果?

C# 如何确保启用空气动力学效果?,c#,wpf,winapi,aero,dwm,C#,Wpf,Winapi,Aero,Dwm,是否有任何api或我们确定的东西,玻璃效果已经激活?在我看到的一些代码中,如果DllNotFoundException抛出,那么它们会确保它不处于活动状态或不存在。有更好的或标准的方法吗 这是使用Aero Effect来检测玻璃的解决方案。它建议您可以使用以下方法检测玻璃: 当桌面合成的状态为 更改后,WM_DWM组合将更改 消息是广播的。没有 参数告诉您它是否正在运行 启用或禁用,由您决定 调用DwmIsCompositionEnabled,如果 你很感兴趣。执行以下操作的代码: 检查很简单,

是否有任何api或我们确定的东西,玻璃效果已经激活?在我看到的一些代码中,如果
DllNotFoundException
抛出,那么它们会确保它不处于活动状态或不存在。有更好的或标准的方法吗

这是使用Aero Effect来检测玻璃的解决方案。

它建议您可以使用以下方法检测玻璃:

当桌面合成的状态为 更改后,WM_DWM组合将更改 消息是广播的。没有 参数告诉您它是否正在运行 启用或禁用,由您决定 调用DwmIsCompositionEnabled,如果 你很感兴趣。执行以下操作的代码: 检查很简单,但很棘手 部分是决定你想要什么样的生活 窗口以查看合成是否正确 残疾人


但是,我不确定您是否可以“启用Aero”但可以“禁用Glass”,如果可以,该方法的结果会是什么。

有关DWM功能的列表,请参阅。您的目标是Windows Vista之前的Windows版本(如Windows XP)吗?如果没有,则没有理由检查
DllNotFoundException
。该测试的目的不是确定是否启用了Aero效果,而是在主机操作系统不支持负责驱动Aero界面的桌面窗口管理器(DWM)功能的情况下。这并不能真正解决捕获
DllNotFoundException
所遇到的问题。在Vista之前的Windows版本中,
dwmapi.dll
不存在。因此,尝试从该DLL调用函数将失败。如果主机操作系统为Vista或更高版本,则只能成功调用
DwmIsCompositionEnabled
。mmmm:-?我想如果我们用
Environment.OS.Version>=6迁移它,那么它就完成了@Jalal:的确,这是做事情的例外证明方式。道歉-我没有考虑过Vista。如果您需要将其作为目标,那么按照您的建议检查OS.Version可能是最好的方法。Environment.OSVersion.Version.Major>=6这仅在vista或更高版本时才适用
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();

// Check to see if composition is Enabled
if (Environment.OSVersion.Version.Major >= 6 && DwmIsCompositionEnabled())
{
    // enable glass rendering
}
else
{
    // fallback rendering
}