เลยคิดเล่นๆว่าเขียนโปรแกรม แสดง Event Log สุดท้ายก่อนเมื่อวานนี้ก่อนที่เราจะ Shut down ดีกว่า จะได้รู้ว่าเวลาสุดท้ายที่เกิดการ Run Application นั้นเป็นเวลากี่โมง ซึ่งจะคิดเป็นวันต่อวันตามหลักการคนออฟฟิต นั่นคือ เริ่มงาน 8 โมง ถึงประมาณ 5 โมง หรืออาจถึง 4 ทุ่ม ซึ่งคิดเป็นวันต่อวันนั่นแหละ
นั่นหมายความว่าถ้าผม Shutdown เครื่องตอน 6 โมง แล้วกลับมาใช้คอมใหม่วันรุ่งขึ้น ผมจะสามารถอ่าน Event Log ล่าสุดของเมื่อวานได้ 6 โมงตรง ซึ่งเป็นเวลาที่ผม Shutdown เครื่องพอดิบพอดี ถ้า เวลาที่อ่านได้ มากไปกว่านี้ เช่น 1 ทุ่ม แสดงว่าผมลืม Shutdown หรือ อาจเพราะว่ามีคนเข้ามาใช้เครื่องคอมพิวเตอร์
หลักการก็ง่ายๆ ใน logic ของ โปรแกรม อธิบายสั้นๆคือ อ่าน Log มาจากระบบนั่นแหละ ซึ่งมีอยู่ด้วยกัน 3 ประเภทหลักๆ ได้แก่ Information, Warning, Error ซึ่งผมจะอ่านเอา Information เพราะเกิดจาก Service ต่างๆที่รันบนเครื่อง ตั้งแต่เปิดยันปิด ทำให้ได้ข้อมูลเวลาที่แม่นยำกว่า จากนั่นก็เรียงตามเวลาที่เกิดล่าสุดไป แล้วเทียบเวลาไปด้วย เมื่อไหร่ที่ Log อ่านพบว่ามีการขึ้นวันใหม่ จากค่าวันที่ที่อ่านได้แตกต่างกัน เช่น 17/7/2557 กับ 16/7/2557 แสดงว่าเป็นล็อกสุดท้ายที่เกิดในวันนั่น ผมก็เอามาแสดงที่ข้อความด้านขวา
เพิ่มเติม ผมตั้ง limit ไว้ 1000 เพราะคิดว่าใน 1 วันไม่น่าเกินจากนี้ ท่านสามารถ เพิ่มได้หรือลดได้ เพื่อประให้อ่านค่าได้ถูกต้อง เช่นเพิ่งเปิดเครื่องก็อาจเลือกที่ 100 ก็ได้ เพราะ 1000 บางทีค่าก็ทะลุไปวันที่สองที่สามที่ผ่านมา ซึ่งเอาเป็นว่าไว้ทำเว่อร์ชั่นถัดๆไปของโปรแกรมนี้ก็แล้วกัน
โค๊ดตัวอย่าง ดังนี้ครับ
private void getEventLog(object obj) { ClearText(); listView1.Items.Clear(); foreach (EventLog log in eventLog) { DateTime date = DateTime.Now; int count = int.Parse(this.txtCount.Text); int coun = 0; for (int i = log.Entries.Count - 1; i > log.Entries.Count - count ; i--) { coun++; if (i == -1) return; var entry = log.Entries[i]; ListViewItem item; item = new ListViewItem(coun.ToString()); item.SubItems.Add(entry.Source.ToString()); if (checkDate.Checked) { if (!dateTimePicker1.Value.Date.Equals(entry.TimeGenerated.Date)) continue; } else { if (date.Date > entry.TimeGenerated.Date) { date = entry.TimeGenerated.Date; item = new ListViewItem(new string[] { entry.Source.ToString() }, "0", Color.Black, Color.Red, new Font(FontFamily.GenericSansSerif, (float)10.0)); txtName.Text = entry.Source.ToString(); txtTime.Text = entry.TimeGenerated.ToString(); txtType.Text = entry.EntryType.ToString(); } } if (checkType.Checked) { if (!entry.EntryType.ToString().Equals(comboType.SelectedItem.ToString())) continue; } item.SubItems.Add(entry.EntryType.ToString()); item.SubItems.Add(entry.TimeGenerated.ToString()); item.SubItems.Add(entry.Message.ToString()); item.SubItems.Add(entry.MachineName.ToString()); listView1.Items.Add(item); //Console.WriteLine(entry.TimeWritten); } Console.WriteLine("Count : " + coun); return; }
ดาว์นโหลดโปรแกรมได้ที่
ไม่มีความคิดเห็น:
แสดงความคิดเห็น