diff --git a/FlashWindow.cs b/FlashWindow.cs new file mode 100644 index 0000000..0e8de45 --- /dev/null +++ b/FlashWindow.cs @@ -0,0 +1,136 @@ +using System.Runtime.InteropServices; +using System; +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 + { + /// + /// The size of the structure in bytes. + /// + public uint cbSize; + /// + /// A Handle to the Window to be Flashed. The window can be either opened or minimized. + /// + public IntPtr hwnd; + /// + /// The Flash Status. + /// + public uint dwFlags; + /// + /// The number of times to Flash the window. + /// + public uint uCount; + /// + /// The rate at which the Window is to be flashed, in milliseconds. If Zero, the function uses the default cursor blink rate. + /// + public uint dwTimeout; + } + /// + /// Stop flashing. The system restores the window to its original stae. + /// + public const uint FLASHW_STOP = 0; + + /// + /// Flash the window caption. + /// + public const uint FLASHW_CAPTION = 1; + + /// + /// Flash the taskbar button. + /// + public const uint FLASHW_TRAY = 2; + + /// + /// Flash both the window caption and taskbar button. + /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. + /// + public const uint FLASHW_ALL = 3; + /// + /// Flash continuously, until the FLASHW_STOP flag is set. + /// + public const uint FLASHW_TIMER = 4; + /// + /// Flash continuously until the window comes to the foreground. + /// + public const uint FLASHW_TIMERNOFG = 12; + + /// + /// Flash the spacified Window (Form) until it recieves focus. + /// + /// The Form (Window) to Flash. + /// + 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; + } + /// + /// Flash the specified Window (form) for the specified number of times + /// + /// The Form (Window) to Flash. + /// The number of times to Flash. + /// + 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; + } + /// + /// Start Flashing the specified Window (form) + /// + /// The Form (Window) to Flash. + /// + 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; + } + /// + /// Stop Flashing the specified Window (form) + /// + /// + /// + 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; + } + /// + /// A boolean value indicating whether the application is running on Windows 2000 or later. + /// + private static bool Win2000OrLater + { + get { return System.Environment.OSVersion.Version.Major >= 5; } + } +} \ No newline at end of file diff --git a/Form1.cs b/Form1.cs index 8fbf702..dc49c03 100644 --- a/Form1.cs +++ b/Form1.cs @@ -6,15 +6,17 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using System.Runtime.InteropServices; namespace WebChecker { public partial class Form1 : Form { - const int CHECK_PERIOD = 30000; + const int CHECK_PERIOD = 1000*30; WebBrowser wb = new WebBrowser(); string url = "http://me.sayclub.com/profile/home/view/ban8"; + //string url = "http://me.sayclub.com/profile/home/view/tosvmfks53"; Timer m_Timer = new Timer(); int m_iReqCnt = 0; @@ -37,6 +39,16 @@ namespace WebChecker wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); } + void Alert(string message) + { + this.Show(); + this.TopMost = true; + FlashWindow.Start(this); + + MessageBox.Show(this, message); + FlashWindow.Stop(this); + } + void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if(e.Url.Host != wb.Url.Host) @@ -61,7 +73,7 @@ namespace WebChecker if(attr.IndexOf("login") >= 0) { Process.Checked = false; - MessageBox.Show("logged in"); + Alert("logged in"); } lbStatus.Text = "상태 : 체크 완료"; diff --git a/WebChecker.csproj b/WebChecker.csproj index 7312817..fc71206 100644 --- a/WebChecker.csproj +++ b/WebChecker.csproj @@ -48,6 +48,8 @@ + + Form