【发布时间】:2016-07-15 12:14:53
【问题描述】:
我正在尝试禁用窗口中的“淡入淡出”动画,每当您打开或最大化/最小化窗口时就会发生这种动画。
当然也可以手动取消勾选最小化和最大化时动画窗口
我正在尝试通过SystemParametersInfo 做到这一点 这是我的电话:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, bool pvParam,uint fWinIni);
private static UInt32 SPIF_SENDCHANGE = 0x02;
private static UInt32 SPI_SETUIEFFECTS = 0x103F;
public static void Main()
{
bool res= SystemParametersInfo(SPI_SETUIEFFECTS, 0, false, SPIF_SENDCHANGE);
}
result 的值始终是 True ,所以我知道该函数已成功调用。
但我看不到任何结果...Windows 仍会继续为我调整大小的任何窗口设置动画。
我将它编译为 AnyCPU,在 Windows 10 上以管理员身份运行。
对于@cody gray,这是代码(将 ref 关键字添加到 ai 参数并将 Marshal.Sizeof(ai) 转换为 `uint)。
[StructLayout(LayoutKind.Sequential)]
public struct ANIMATIONINFO
{
public uint cbSize;
public int iMinAnimate;
};
[DllImport("user32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SystemParametersInfo(uint uiAction,
uint uiParam,
ref ANIMATIONINFO pvParam,
uint fWinIni);
public static uint SPIF_SENDCHANGE = 0x02;
public static uint SPI_SETANIMATION = 0x0049;
public static void Main()
{
ANIMATIONINFO ai=new ANIMATIONINFO();
ai.cbSize = (uint)Marshal.SizeOf(ai);
ai.iMinAnimate = 0; // turn all animation off
SystemParametersInfo(SPI_SETANIMATION, 0, ref ai, SPIF_SENDCHANGE);
}
最后一个问题——如果我想回到原来的状态——这意味着我想再次激活动画,为了做到这一点应该改变什么参数?
【问题讨论】:
-
您可能需要注销并重新登录才能看到它...
-
@AustinFrench 我会试一试...稍后回来:)
-
@AustinFrench 仍然没有任何改变 :) 我尝试禁用其他属性 - 例如禁用投影msdn.microsoft.com/en-us/library/windows/desktop/… 并且它确实有效.. :(
-
它为帧设置动画,不知道“褪色”可能是什么样子。使用 DwmSetWindowAttribute() 如this snippet 所示。
-
@Slashy:谢谢,现在 +1,因为它使问题变得完整。
标签: c# .net windows winapi animation