Я разрабатываю приложение, которое управляет Machine.
Когда я получаю сообщение об ошибке от Машины, пользователи должны быть в состоянии сразу заметить это. Один из способов сделать это - мигать лоток на панели задач. Когда машина сбрасывает ошибку, индикатор лотка должен перестать мигать.
Есть одно небольшое неудобство при использовании функции FlashWindowEx, когда я убираю мигание окна, оно остается (в моем случае winXP) оранжевым (не мигает) .
[Flags]
public enum FlashMode {
///
/// Stop flashing. The system restores the window to its original state.
///
FLASHW_STOP = 0,
///
/// Flash the window caption.
///
FLASHW_CAPTION = 1,
///
/// Flash the taskbar button.
///
FLASHW_TRAY = 2,
///
/// Flash both the window caption and taskbar button.
/// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
///
FLASHW_ALL = 3,
///
/// Flash continuously, until the FLASHW_STOP flag is set.
///
FLASHW_TIMER = 4,
///
/// Flash continuously until the window comes to the foreground.
///
FLASHW_TIMERNOFG = 12
}
public static bool FlashWindowEx(IntPtr hWnd, FlashMode fm) {
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = (UInt32)fm;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
return FlashWindowEx(ref fInfo);
}
[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO {
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
В моем случае я использую FLASHW_TRAY, чтобы начать мигать, и FLASHW_STOP, чтобы остановить мигание.
Я что-то делаю не так или это известная ошибка WinXP и есть ли ее исправление?





Поведение такое же, когда окно перестает мигать столько, сколько должно: кнопка на панели задач остается цветной. Я не думаю, что это ошибка. Если подумать, когда вы используете FLASHW_STOP, мигание на самом деле прекращается, но его цель - привлечь внимание пользователя. Кнопка остается цветной, потому что пользователь, возможно, еще не посмотрел вниз и обнаружил, что окно который пытается привлечь ее внимание. Сохранение цвета кнопки позволяет сохранить эту информацию доступной.
Извините за поздний ответ, меня не было в офисе.
Если это ожидаемая функциональность, я думаю, что это не так полезно, по крайней мере, должен быть сброс.
Я исправил это сейчас, просто используя комбинацию FLASHW_ALL | FLASHW_TIMERNOFG.
Кстати, не могу оценить ваши ответы, пока недостаточно репутации.
Вот ошибка:
fInfo.uCount = UInt32.MaxValue;
Вы должны установить для fInfo.uCount нулевое значение при вызове с параметром FLASHW_STOP. В противном случае, когда вы попытаетесь вызвать стоп, когда кнопка панели задач активна, она останется активной.
Вы можете проверить заметку о неопределенном поведении здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v=vs.85).aspx
Я знаю, что это старый пост, но он может помочь другим людям быстро решить эту проблему.
Просто установите uCount на 0, чтобы прекратить мигание.
Добавьте пояснение к своему ответу.!