Comment faire clignoter la barre des tâches dans mon application, comme le fait Messenger, lorsqu'un nouveau message arrive?
Question
Existe-t-il un appel d'API dans .NET ou une DLL native que je peux utiliser pour créer un comportement similaire à Windows Live Messenger lorsqu'une réponse provient d'une personne avec laquelle je discute?
La solution
FlashWindowEx est la voie à suivre. Voir ici pour la documentation 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;
Appel de la fonction:
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);
Ceci a été inséré sans vergogne depuis Pinvoke.net
Autres conseils
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);
Volé de gtokas, membre d’échange d’experts.
Extrait d'un billet de blog Raymond Chen:
Comment puis-je flasher ma légende de fenêtre et bouton de la barre des tâches manuellement?
Comment flasher ma légende de fenêtre et bouton de la barre des tâches manuellement? Commentateur Jonathan Scheepers s'interroge sur ceux programmes qui clignotent leur barre des tâches bouton indéfiniment, en remplaçant le nombre de flashs par défaut défini par SysteParametersInfo (SPI_SETFOREGROUNDFLASHCOUNT).
La fonction FlashWindowEx et son précurseur plus simple FlashWindow laisser un programme flash sa légende de la fenêtre et bouton de la barre des tâches manuellement. La fenêtre le responsable affiche la légende automatiquement (et Explorer suit la légende en faisant clignoter la barre des tâches bouton) si un programme appelle SetForegroundWindow quand ce n'est pas le cas avoir la permission de prendre le premier plan, et c'est ce clignotement automatique qui le SPI_SETFOREGROUNDFLASHCOUNT réglage des contrôles.
À titre d'illustration, je vais montrer la légende manuellement. C'est en général pas recommandé, mais depuis que vous avez demandé, Je vais te montrer comment. Et puis promis vous ne le ferez pas.
Commencez par le programme de travail et faites ce simple changement:
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); } }
Compilez et exécutez ce programme, puis minimiser. Quand vous le faites, sa barre des tâches le bouton clignote indéfiniment jusqu'à ce que vous Clique dessus. Le programme répond à être minimisé en appelant le Fonction FlashWindowEx demandant tout ce qui est possible (actuellement le légende et bouton de la barre des tâches) flashé jusqu'à ce que la fenêtre arrive à la au premier plan.
Autres membres de FLASHWINFO structure vous permet de personnaliser le comportement clignotant plus loin, comme contrôler la fréquence du flash et le nombre de clignotements. et si tu vraiment envie de prendre le contrôle, vous pouvez utilisez FLASHW_ALL et FLASHW_STOP pour activer votre légende et le bouton de la barre des tâches et exactement comme vous le souhaitez. (Qui sait, peut-être que vous voulez envoyer un message en code Morse.)
Publié le lundi 12 mai 2008 à 07h00 by oldnewthing Classé dans: Code
L’API FlashWindowEx Win32 est l’appel utilisé pour cela. La documentation pour cela est à: http://msdn.microsoft.com/en-us /library/ms679347(VS.85).aspx
Je pense que vous recherchez SetForegroundWindow
.