using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; namespace WebChecker { public partial class Form1 : Form { 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; int m_iRespCnt = 0; DateTime m_LastCheckT; StreamWriter m_FileLog = new StreamWriter("WebChecker.log", true); public Form1() { InitializeComponent(); notifyIcon1.Visible = false; tbURL.Text = url; m_Timer.Interval = 1000; m_Timer.Tick += new EventHandler(m_Timer_Tick); wb.ScriptErrorsSuppressed = true; wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); Log("=== App Launch ==="); } private void Form1_Load(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } private void Form1_Shown(object sender, EventArgs e) { this.Hide(); } void Alert(string message) { this.Show(); this.TopMost = true; FlashWindow.Start(this); MessageBox.Show(this, message); FlashWindow.Stop(this); } void Log(string message) { Console.WriteLine("[" + DateTime.Now + "] " + message); m_FileLog.WriteLine("[" + DateTime.Now + "] " + message); m_FileLog.Flush(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { notifyIcon1.Visible = false; Log("=== App Closing ==="); m_FileLog.Close(); } void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if(e.Url.Host != wb.Url.Host) return; if((sender == wb) && (wb.ReadyState == WebBrowserReadyState.Complete || wb.ReadyState == WebBrowserReadyState.Interactive)) { lbStatus.Text = "상태 : 응답 받고 체크 중"; m_iRespCnt++; lbRespCnt.Text = "응답 : " + m_iRespCnt; HtmlDocument doc = wb.Document; HtmlElement element = doc.GetElementById("sbPersonalInfo"); element = element.Children[element.Children.Count-1]; element = element.Children[0]; element = element.GetElementsByTagName("IMG")[0]; string attr = element.GetAttribute("src"); if(attr.IndexOf("login") >= 0) { Process.Checked = false; Log(url + " checked"); Alert("logged in"); } lbStatus.Text = "상태 : 체크 완료"; wb.Stop(); } } void m_Timer_Tick(object sender, EventArgs e) { if(wb.IsBusy == false) { TimeSpan span = DateTime.Now-m_LastCheckT; if(span.TotalMilliseconds >= CHECK_PERIOD) { m_iReqCnt++; lbReqCnt.Text = "요청 : " + m_iReqCnt; lbStatus.Text = "상태 : 요청 중"; wb.Navigate(url); m_LastCheckT = m_LastCheckT+TimeSpan.FromMilliseconds(CHECK_PERIOD); } else { lbStatus.Text = "상태 : 대기 (" + (int)(CHECK_PERIOD-span.TotalMilliseconds)/1000 + "초...)"; } } } private void Process_CheckedChanged(object sender, EventArgs e) { if(Process.Checked == true) { m_LastCheckT = DateTime.Now - TimeSpan.FromMilliseconds(CHECK_PERIOD-1000); m_Timer.Start(); Log(url + " check start"); url = tbURL.Text; tbURL.Enabled = false; } else { m_iReqCnt = 0; m_iRespCnt = 0; lbReqCnt.Text = "요청 : 0"; lbRespCnt.Text = "응답 : 0"; lbStatus.Text = "상태 : 대기"; m_Timer.Stop(); Log(url + " check stop"); tbURL.Enabled = true; if(wb.IsBusy == true) wb.Stop(); } } private void Form1_Resize(object sender, EventArgs e) { if(this.WindowState == FormWindowState.Minimized) { notifyIcon1.Visible = true; this.Hide(); } else if(this.WindowState == FormWindowState.Normal) { notifyIcon1.Visible = false; this.ShowInTaskbar = true; } } private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; } private void btOpen_Click(object sender, EventArgs e) { try { System.Diagnostics.Process.Start(tbURL.Text); } catch(System.ComponentModel.Win32Exception noBrowser) { if(noBrowser.ErrorCode == -2147467259) MessageBox.Show(noBrowser.Message); } catch(System.Exception other) { MessageBox.Show(other.Message); } } } }