Как заставить панель задач мигать в моем приложении, как в Messenger, когда приходит новое сообщение? - PullRequest
20 голосов
/ 16 сентября 2008

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

Ответы [ 5 ]

23 голосов
/ 16 сентября 2008

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

4 голосов
/ 16 сентября 2008
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);

похищен у экспертов-обменников гтокас.

FlashWindowEx .

3 голосов
/ 16 сентября 2008

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

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

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

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

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

Начните с нуля программы и сделайте это простое изменение:

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 Подано в: Код

2 голосов
/ 16 сентября 2008

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

0 голосов
/ 16 сентября 2008

Я полагаю, что вы ищете SetForegroundWindow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...