■ FlashWindowEx API 함수를 사용해 비활성화시 작업 표시줄을 깜박이는 방법을 보여준다.
▶ TaskbarHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
using System; using System.Runtime.InteropServices; namespace TestProject { public static class TaskbarHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// Structure ////////////////////////////////////////////////////////////////////////////////////////// Public #region 윈도우 깜박이기 정보 - FLASHWINFO /// <summary> /// 윈도우 깜박이기 정보 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct FLASHWINFO { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public uint Size; /// <summary> /// 윈도우 핸들 /// </summary> public IntPtr WindowHandle; /// <summary> /// 플래그 /// </summary> public uint Flag; /// <summary> /// 카운트 /// </summary> public uint Count; /// <summary> /// 타임아웃 /// </summary> public uint Timeout; #endregion } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Import ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 윈도우 작업 표시줄 깜박이기 - FlashWindowEx(info); /// <summary> /// 윈도우 작업 표시줄 깜박이기 /// </summary> /// <param name="info">윈도우 작업 표시줄 깜박이기 정보</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern int FlashWindowEx(ref FLASHWINFO info); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// FLASHW_STOP /// </summary> private const uint FLASHW_STOP = 0; /// <summary> /// FLASHW_CAPTION /// </summary> private const uint FLASHW_CAPTION = 1; /// <summary> /// FLASHW_TRAY /// </summary> private const uint FLASHW_TRAY = 2; /// <summary> /// FLASHW_ALL /// </summary> private const uint FLASHW_ALL = 3; /// <summary> /// FLASHW_TIMER /// </summary> private const uint FLASHW_TIMER = 4; /// <summary> /// FLASHW_TIMERNOFG /// </summary> private const uint FLASHW_TIMERNOFG = 12; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region 윈도우 깜박이기 - FlashWindow(windowHandle) /// <summary> /// 윈도우 깜박이기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <returns>처리 결과</returns> public static bool FlashWindow(IntPtr windowHandle) { FLASHWINFO info = new FLASHWINFO(); info.Size = Convert.ToUInt32(Marshal.SizeOf(info)); info.WindowHandle = windowHandle; info.Flag = FLASHW_ALL | FLASHW_TIMERNOFG; info.Count = uint.MaxValue; info.Timeout = 0; return (FlashWindowEx(ref info) == 0); } #endregion } } |
▶ MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
using System; using System.Windows.Forms; namespace TestProject { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : Form { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 타이머 /// </summary> private Timer timer; private int count = 0; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent(); this.timer = new Timer(); this.timer.Interval = 1000; Deactivate += Form_Deactivate; this.timer.Tick += timer_Tick; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 폼 비활성화시 처리하기 - Form_Deactivate(sender, e) /// <summary> /// 폼 비활성화시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void Form_Deactivate(object sender, EventArgs e) { this.timer.Enabled = true; } #endregion #region 타이머 틱 처리하기 - timer_Tick(sender, e) /// <summary> /// 타이머 틱 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void timer_Tick(object sender, EventArgs e) { this.count++; if(this.count == 3) // 비활성화 3초후부터 해당 작업 표시줄을 깜박인다. { this.timer.Enabled = false; this.count = 0; TaskbarHelper.FlashWindow(Handle); } } #endregion } } |