tutorial programacion funciones windows winapi

windows - programacion - winapi c++ tutorial



¿Cómo hacer que la barra de tareas parpadee en mi aplicación como lo hace Messenger cuando llega un nuevo mensaje? (5)

¿Hay una llamada a la API en .NET o una DLL nativa que pueda usar para crear un comportamiento similar a Windows Live Messenger cuando recibo una respuesta de alguien con quien chateo?



De una entrada del blog de Raymond Chen:

¿Cómo visualizo manualmente el título de mi ventana y el botón de la barra de tareas?

¿Cómo visualizo manualmente el título de mi ventana y el botón de la barra de tareas? El comentarista Jonathan Scheepers se pregunta sobre los programas que muestran el botón de la barra de tareas de forma indefinida, anulando el conteo flash predeterminado establecido por SysteParametersInfo (SPI_SETFOREGROUNDFLASHCOUNT).

La función FlashWindowEx y su precursor más simple FlashWindow permiten que un programa muestre manualmente el título de su ventana y el botón de la barra de tareas. El administrador de ventanas muestra los subtítulos automáticamente (y Explorer sigue el título al hacer parpadear el botón de la barra de tareas) si un programa llama a SetForegroundWindow cuando no tiene permiso para tomar el primer plano, y es ese parpadeo automático que controla la configuración de SPI_SETFOREGROUNDFLASHCOUNT.

Para fines de ilustración, demostraré que el título se muestra intermitentemente. Por lo general, esto no es recomendable, pero ya que lo pidió, le mostraré cómo hacerlo. Y luego prometa que no lo hará.

Comience con el programa de cero y realice este cambio simple:

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); } }

Compila y ejecuta este programa, luego minimízalo. Cuando lo haga, su botón de barra de tareas parpadeará indefinidamente hasta que haga clic en él. El programa responde a la minimización llamando a la función FlashWindowEx solicitando que todo lo posible (actualmente, el botón de título y la barra de tareas) se muestre hasta que la ventana aparezca en primer plano.

Otros miembros de la estructura FLASHWINFO le permiten personalizar aún más el comportamiento del flash, como controlar la frecuencia del flash y el número de flashes. y si realmente quiere tomar el control, puede usar FLASHW_ALL y FLASHW_STOP para activar y desactivar el botón de la leyenda y la barra de tareas exactamente de la manera que desee. (Quién sabe, quizás quieras enviar un mensaje en código Morse).

Publicado lunes, 12 de mayo de 2008 7:00 a.m. por oldnewthing Archivado en: Código


FlashWindowEx es el camino a seguir. Vea aquí la documentación de 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;

Llamar a la función:

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);

Esto fue descaradamente enchufado de 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);

Robado de gtokas de miembros de intercambio de expertos.

FlashWindowEx .