The application window flashes like orange on the taskbar when

I have an application window. when I minimize the taskbar window application to work with another application. we have a tool similar to sending a message from one application window to another application window

so my first winner application is minimized and now I open my other winner application and then send a message to the first application, but the first application is on the taskbar. so I want functionality, for example, when a message captures my first application, then it will blink like skype or any messenger.

I tried the "FlashWindowEx" method for User32.dll. but no luck. I tried with the option "Flash continuously until the window comes to the fore." but no luck.

Please help solve this problem with an example.

thank

+32
c # winapi winforms
Jul 03 '12 at 11:20
source share
4 answers

I do this as shown below, be sure to add the necessary links as shown

using System.Runtime.InteropServices; using Microsoft.Win32; // To support flashing. [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool FlashWindowEx(ref FLASHWINFO pwfi); //Flash both the window caption and taskbar button. //This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. public const UInt32 FLASHW_ALL = 3; // Flash continuously until the window comes to the foreground. public const UInt32 FLASHW_TIMERNOFG = 12; [StructLayout(LayoutKind.Sequential)] public struct FLASHWINFO { public UInt32 cbSize; public IntPtr hwnd; public UInt32 dwFlags; public UInt32 uCount; public UInt32 dwTimeout; } // Do the flashing - this does not involve a raincoat. public static bool FlashWindowEx(Form form) { IntPtr hWnd = form.Handle; FLASHWINFO fInfo = new FLASHWINFO(); fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo)); fInfo.hwnd = hWnd; fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG; fInfo.uCount = UInt32.MaxValue; fInfo.dwTimeout = 0; return FlashWindowEx(ref fInfo); } 

This should contain everything you need.

Hope this helps.

+25
Jul 03 '12 at 11:45
source share

C #: Flash window on the taskbar via Win32 FlashWindowEx , this works for me.

The Windows API (Win32) uses the FlashWindowEx method in the User32 library; This method allows you (the developer) to create a Flash window, which means that some important event has occurred in which requires their attention. The most common use of this is to blink a window until the user returns focus to the expression. However, you can also blink the window to the specified number or just keep blinking until you decide when to stop.

However, using the FlashWindowEx method is not built into .NET. Frames anywhere. In order to access it, you need to use the platform to Call (PInvoke) .NET functions to β€œdrop” it to the Windows API (Win32) and call it directly. In addition, as with many other functions in the Windows API (which are not directly displayed by .NET), the FlashWindowEx method can be a little difficult to use if you are not familiar with working with the Windows API from .NET.

Now, rather than delving into the specifics of the PInvoke or Win32 FlashWindowEx Method, below is a simple static class in C # that allows you to easily use this method. In fact, there is quite a bit of information needed to explain how to use PInvoke to use the Windows API (Win32), so maybe I will talk about this in the next article.

Here is an example of using this static class:

 // One this to note with this example usage code, is the "this" keyword is referring to // the current System.Windows.Forms.Form. // Flash window until it recieves focus FlashWindow.Flash(this); // Flash window 5 times FlashWindow.Flash(this, 5); // Start Flashing "Indefinately" FlashWindow.Start(this); // Stop the "Indefinate" Flashing FlashWindow.Stop(this); 

One note about the FlashWindowEx method is that it requires (and will only work) Windows 2000 or later.

Here is the code for the static class in C #:

 public static class FlashWindow { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); [StructLayout(LayoutKind.Sequential)] private struct FLASHWINFO { /// <summary> /// The size of the structure in bytes. /// </summary> public uint cbSize; /// <summary> /// A Handle to the Window to be Flashed. The window can be either opened or minimized. /// </summary> public IntPtr hwnd; /// <summary> /// The Flash Status. /// </summary> public uint dwFlags; /// <summary> /// The number of times to Flash the window. /// </summary> public uint uCount; /// <summary> /// The rate at which the Window is to be flashed, in milliseconds. If Zero, the function uses the default cursor blink rate. /// </summary> public uint dwTimeout; } /// <summary> /// Stop flashing. The system restores the window to its original stae. /// </summary> public const uint FLASHW_STOP = 0; /// <summary> /// Flash the window caption. /// </summary> public const uint FLASHW_CAPTION = 1; /// <summary> /// Flash the taskbar button. /// </summary> public const uint FLASHW_TRAY = 2; /// <summary> /// Flash both the window caption and taskbar button. /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. /// </summary> public const uint FLASHW_ALL = 3; /// <summary> /// Flash continuously, until the FLASHW_STOP flag is set. /// </summary> public const uint FLASHW_TIMER = 4; /// <summary> /// Flash continuously until the window comes to the foreground. /// </summary> public const uint FLASHW_TIMERNOFG = 12; /// <summary> /// Flash the spacified Window (Form) until it recieves focus. /// </summary> /// <param name="form">The Form (Window) to Flash.</param> /// <returns></returns> public static bool Flash(System.Windows.Forms.Form form) { // Make sure we're running under Windows 2000 or later if (Win2000OrLater) { FLASHWINFO fi = Create_FLASHWINFO(form.Handle, FLASHW_ALL | FLASHW_TIMERNOFG, uint.MaxValue, 0); return FlashWindowEx(ref fi); } return false; } private static FLASHWINFO Create_FLASHWINFO(IntPtr handle, uint flags, uint count, uint timeout) { FLASHWINFO fi = new FLASHWINFO(); fi.cbSize = Convert.ToUInt32(Marshal.SizeOf(fi)); fi.hwnd = handle; fi.dwFlags = flags; fi.uCount = count; fi.dwTimeout = timeout; return fi; } /// <summary> /// Flash the specified Window (form) for the specified number of times /// </summary> /// <param name="form">The Form (Window) to Flash.</param> /// <param name="count">The number of times to Flash.</param> /// <returns></returns> public static bool Flash(System.Windows.Forms.Form form, uint count) { if (Win2000OrLater) { FLASHWINFO fi = Create_FLASHWINFO(form.Handle, FLASHW_ALL, count, 0); return FlashWindowEx(ref fi); } return false; } /// <summary> /// Start Flashing the specified Window (form) /// </summary> /// <param name="form">The Form (Window) to Flash.</param> /// <returns></returns> public static bool Start(System.Windows.Forms.Form form) { if (Win2000OrLater) { FLASHWINFO fi = Create_FLASHWINFO(form.Handle, FLASHW_ALL, uint.MaxValue, 0); return FlashWindowEx(ref fi); } return false; } /// <summary> /// Stop Flashing the specified Window (form) /// </summary> /// <param name="form"></param> /// <returns></returns> public static bool Stop(System.Windows.Forms.Form form) { if (Win2000OrLater) { FLASHWINFO fi = Create_FLASHWINFO(form.Handle, FLASHW_STOP, uint.MaxValue, 0); return FlashWindowEx(ref fi); } return false; } /// <summary> /// A boolean value indicating whether the application is running on Windows 2000 or later. /// </summary> private static bool Win2000OrLater { get { return System.Environment.OSVersion.Version.Major >= 5; } } } 
+21
Jul 03 '12 at 11:40
source share
Guys, I found a much easier way to do this! If so, you use it for.

In .NET 4.0, C #, if you just use

 this.WindowState = FormWindowState.Normal; this.Activate(); 

The first line ensures that it is not minimized; the second line makes it the focus. I'm not sure why (none of them do this), but in combination, if you show the MessageBox from this form, your program will start blinking orange on the taskbar!

+1
Jun 27 '14 at 15:40
source share

I know this question is quite old, but based on MoonKnight's answer, I made an improvement that may seem useful. I converted it to a form extension.

 public static class ExtensionMethods { // To support flashing. [DllImport("user32.dll", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); //Flash both the window caption and taskbar button. //This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. private const uint FLASHW_ALL = 3; // Flash continuously until the window comes to the foreground. private const uint FLASHW_TIMERNOFG = 12; [StructLayout(LayoutKind.Sequential)] private struct FLASHWINFO { public uint cbSize; public IntPtr hwnd; public uint dwFlags; public uint uCount; public uint dwTimeout; } /// <summary> /// Send form taskbar notification, the Window will flash until get focus /// <remarks> /// This method allows to Flash a Window, signifying to the user that some major event occurred within the application that requires their attention. /// </remarks> /// </summary> /// <param name="form"></param> /// <returns></returns> public static bool FlashNotification(this Form form) { IntPtr hWnd = form.Handle; FLASHWINFO fInfo = new FLASHWINFO(); fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo)); fInfo.hwnd = hWnd; fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG; fInfo.uCount = uint.MaxValue; fInfo.dwTimeout = 0; return FlashWindowEx(ref fInfo); } } 

To use it in a form, you just need to call

 this.FlashNotification(); 

To change the flash method, just view this table

0
Aug 31 '17 at 10:35
source share



All Articles