Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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.

Ответ 3

Из записи блога Raymond Chen:

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

Как мне закрасить заголовок окна и кнопку панели задач вручную? 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 by oldnewthing Подано в: Код