Как заставить панель задач мигать в моем приложении, как это делает Messenger, когда приходит новое сообщение?

StackOverflow https://stackoverflow.com/questions/73162

  •  09-06-2019
  •  | 
  •  

Вопрос

Есть ли вызов API в .NET или встроенная библиотека DLL, которую я могу использовать для создания поведения, аналогичного поведению Windows Live Messenger, когда приходит ответ от кого-то, с кем я общаюсь в чате?

Это было полезно?

Решение

FlashWindowEx - это правильный путь.Видишь здесь приведена документация MSDN

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
    public UInt32 cbSize;
    public IntPtr hwnd;
    public UInt32 dwFlags;
    public UInt32 uCount;
    public UInt32 dwTimeout;
}

public const UInt32 FLASHW_ALL = 3; 

Вызов функции:

FLASHWINFO fInfo = new FLASHWINFO();

fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = FLASHW_ALL;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;

FlashWindowEx(ref fInfo);

Это было бесстыдно отключено от Pinvoke.net

Другие советы

HWND hHandle = FindWindow(NULL,"YourApplicationName");
FLASHWINFO pf;
pf.cbSize = sizeof(FLASHWINFO);
pf.hwnd = hHandle;
pf.dwFlags = FLASHW_TIMER|FLASHW_TRAY; // (or FLASHW_ALL to flash and if it is not minimized)
pf.uCount = 8;
pf.dwTimeout = 75;

FlashWindowEx(&pf);

Украдено у экспертов-членов биржи gtokas.

FlashWindowEx ( Флэш - окно ).

Из записи в блоге Рэймонда Чена:

Как мне вручную прошить заголовок окна и кнопку на панели задач?

Как мне вручную отобразить заголовок окна и кнопку на панели задач?Commenter Джонатан Шиперс интересуется теми программами, которые бесконечно мигают на панели задач кнопкой, переопределяя количество вспышек по умолчанию, установленное SysteParametersInfo (SPI_SETFOREGROUNDFLASHCOUNT).

Функция FlashWindowEx и ее более простой предшественник FlashWindow позволяют программе вручную отображать заголовок окна и кнопку на панели задач.Окно диспетчер автоматически отображает заголовок (а проводник следует за заголовком, мигая кнопкой на панели задач ), если программа вызывает Устанавливайте foregroundwindow, когда у него нет разрешения выходить на передний план, и именно это автоматическое мигание управляет настройкой SPI_SETFOREGROUNDFLASHCOUNT .

Для наглядности, я показать мигает надпись вручную.Вообще говоря, это не рекомендуется, но раз уж вы спросили, Я покажу вам, как это сделать.И тогда обещаю, ты не сделаешь этого.

Начните с программы scratch и внесите это простое изменение:

void
OnSize(HWND hwnd, UINT state, int cx, int cy)
{
  if (state == SIZE_MINIMIZED) {
    FLASHWINFO fwi = { sizeof(fwi), hwnd,
                       FLASHW_TIMERNOFG | FLASHW_ALL };
    FlashWindowEx(&fwi);
  }
}

Скомпилируйте и запустите эту программу, затем сверните ее.Когда вы это сделаете, его кнопка на панели задач будет мигать бесконечно, пока вы не нажмете на нее.Программа реагирует на сворачивание, вызывая функцию FlashWindowEx, запрашивающую все возможное (в настоящее время заголовок и кнопка на панели задач), которое нужно мигать, пока окно не перейдет в передний план.

Другие элементы структуры FLASHWINFO позволяют дополнительно настраивать режим мигания, например управлять частотой вспышек и количеством вспышек.и если вы действительно хотите взять управление на себя, вы можете использовать FLASHW_ALL и FLASHW_STOP, чтобы включать и выключать заголовок и кнопку на панели задач именно так, как вы хотите.(Кто знает, может быть, вы захотите отправить сообщение азбукой Морзе.)

Опубликовано понедельник, 12 мая 2008 г., 7:00 утра автором oldnewthing, размещенный в разделе:Код

Для этого используется вызов API FlashWindowEx Win32.Документация к нему находится по адресу:http://msdn.microsoft.com/en-us/library/ms679347 (ПРОТИВ 85).aspx

Я верю, что вы ищете SetForegroundWindow.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top