Я хотел бы знать, как подавить анимацию при вызове метода HWnd ShowWindow(). Вот мой код:HWND API: как отключить анимацию окна при вызове ShowWindow (...)
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow);
public enum ShowWindowCommands
{
HIDE = 0,
SHOWNORMAL = 1,
SHOWMINIMIZED = 2,
MAXIMIZE = 3,
SHOWNOACTIVATE = 4,
SHOW = 5,
MINIMIZE = 6,
SHOWMINNOACTIVE = 7,
SHOWNA = 8,
RESTORE = 9,
SHOWDEFAULT = 10,
FORCEMINIMIZE = 11
}
public static void MinimizeWindow(IntPtr hWnd)
{
ShowWindow(hWnd, ShowWindowCommands.MINIMIZE);
}
Проблема заключается в том, что анимация выполняется, и метод не возвращается до окончания анимации.
Я попытался с помощью DwmSetWindowAttribute() метод:
[DllImport("dwmapi.dll", PreserveSig = true)]
static extern int DwmSetWindowAttribute(IntPtr hWnd, uint attr, ref int attrValue, int size);
const uint DWM_TransitionsForceDisabled = 3;
public static void SetEnabled(IntPtr hWnd, bool enabled)
{
int attrVal = enabled ? 0 : 1;
DwmSetWindowAttribute(hWnd, DWM_TransitionsForceDisabled, ref attrVal, 4);
}
Но анимации не были подавлены. Моя операционная система - Windows 7, 32-разрядная.
Проверьте возвращаемое значение 'DwmSetWindowAttribute', чтобы узнать, не работает ли он, и если да, то почему. –
@ Джонатан Поттер Возвращаемое значение равно нулю, т. Е. Успешная операция –
См. Ответ на http://stackoverflow.com/questions/6160118/disable-aero-peek-in-wpf-application, похоже, что вы передаете указатель данных некорректно. –