Public Class Form1
Dim RiTeBo As New RichTextBox ' per visualizzare i risultati
Dim Button1 As New Button
Dim Button2 As New Button
Dim Label1 As New Label
Dim Label2 As New Label
Dim Eventi As New List(Of String) ' matrice di accumulo
Dim Timer1 As Timer
Dim OraACCENSIONE As Date? ' il punto interrogativo rende la variabile nullable
Dim OraACCENSIONE2 As Date
' ***********************************************************
' * *
' * LETTUTRA LOG SYSTEM DIAGNOSTIC DI WINDOWS *
' * *
' * IN QUESTO ESEMPIO RICERCA DI SOSPENSIONI *
' * E ARRESTI DI WINDOWS *
' * *
' * CAMBIANDO l'ID, SI POSSONO CERCARE ALTRI EVENTI *
' * *
' * TOGLIENDO L'IF SI POSSONO VISUALIZZARE TUTTI GLI EVENTI *
' * *
' ***********************************************************
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim EventoLogApp As New System.Diagnostics.EventLog("System") ' applicazione di diagnostica
Eventi.Clear()
RiTeBo.Clear()
RiTeBo.Refresh()
' ricerca dall'inizio, ID 12 = avvio, ID 13 = arresto (non si generano con sospensione o ibernazione)
For i = 1 To EventoLogApp.Entries.Count - 1
' ogni 50 eventi aggiorno la label (evita rallentamento)
If i Mod 50 = 0 Then Label1.Text = i & "/" & EventoLogApp.Entries.Count : Label1.Refresh()
If EventoLogApp.Entries(i).InstanceId.ToString = 12 Then
Eventi.Add("------ AVVIO SISTEMA IN EVENTO N. " & i)
Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
Eventi.Add("")
End If
If EventoLogApp.Entries(i).InstanceId.ToString = 13 Then
Eventi.Add("------ ARRESTO SISTEMA IN EVENTO N. " & i)
Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
Eventi.Add("")
End If
Next
Label1.Text = EventoLogApp.Entries.Count & "/" & EventoLogApp.Entries.Count
' visualizzazione veloce
RiTeBo.Lines = Eventi.ToArray
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs)
Dim EventoLogApp As New System.Diagnostics.EventLog("System")
Eventi.Clear()
RiTeBo.Clear()
' ricerca dalla fine, per trovare più velocemente gli ultimi avvii, ID 1 = TroubleShooter (si genera più volte durante l'avvio di win)
For i = EventoLogApp.Entries.Count - 1 To 1 Step -1
Label1.Text = i
Label1.Refresh()
If EventoLogApp.Entries(i).InstanceId = 1 Then
Eventi.Add("------ ULTIMO AVVIO WIN DOPO SOSPENSIONE, EVENTO N. " & i)
Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
If OraACCENSIONE Is Nothing Then
OraACCENSIONE = EventoLogApp.Entries(i).TimeGenerated
Timer1.Enabled = True
End If
Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
Eventi.Add("PC: " & EventoLogApp.Entries(i).Message)
Eventi.Add("")
End If
If EventoLogApp.Entries(i).InstanceId = 12 Then
Eventi.Add("------ ULTIMO AVVIO DOPO ARRESTO SISTEMA, EVENTO N. " & i)
Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
OraACCENSIONE2 = EventoLogApp.Entries(i).TimeGenerated
Timer1.Enabled = True
Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
Eventi.Add("")
Exit For ' al primo ID 12 trovato, ricerca interrotta
End If
Next
RiTeBo.Lines = Eventi.ToArray
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' preparazione del Form
Button1.Text = "CERCA tutti"
Button1.Location = New Point(10, 10)
AddHandler Button1.Click, AddressOf Button1_Click
Me.Controls.Add(Button1)
Button2.Text = "CERCA ultima accensione"
Button2.Location = New Point(90, 10)
Button2.Width = 150
AddHandler Button2.Click, AddressOf Button2_Click
Me.Controls.Add(Button2)
Label1.Location = New Point(240, 16)
Label1.AutoSize = True
Me.Controls.Add(Label1)
Label2.Location = New Point(240, 30)
Label2.AutoSize = True
Me.Controls.Add(Label2)
RiTeBo.Location = New Point(10, 50)
Me.Controls.Add(RiTeBo)
Me.Size = New Size(400, 500)
Me.Text = "EVENTI ON/OFF - C.B."
Timer1 = New Timer
AddHandler Timer1.Tick, AddressOf timer1_tick
Timer1.Interval = 1000
Timer1.Enabled = False
End Sub
Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
RiTeBo.Size = New Size(Me.Width - 36, Me.Height - 100)
End Sub
Private Sub timer1_tick(sender As Object, e As EventArgs)
Label1.Text = Now.Subtract(OraACCENSIONE).ToString("G")
Label2.Text = Now.Subtract(OraACCENSIONE2).ToString("G")
End Sub
End Class