VB .NET - Criando um log de eventos


 

 Neste artigo vou mostrar como criar um log de eventos que pode ser usado como um log de auditoria usando a linguagem VB .NET.


Normalmente, o depurador do Visual Studio permite que você examine como um programa funciona com bastante eficácia, mas às vezes é útil usar um registrador de eventos para gravar eventos para estudos posteriores. Por exemplo, quando você está trabalhando com eventos do mouse, interromper a execução em um ponto de interrupção muitas vezes faz com que a sequência de eventos que o programa está tentando rastrear fique confusa.
 

 

Podemos usar a classe SystemEvents que fornece acesso às notificações de eventos do sistema e também a fornece a capacidade para responder a tipos específicos de eventos do sistema para registrar o log na ocorrência de alguns eventos importantes.

Quando um evento do sistema é gerado, os delegados anexados ao evento são chamados usando a linha de execução que monitora  os eventos do sistema. Portanto, você deve fazer qualquer chamada de seu manipulador de evento. Se você precisar chamar um evento do sistema que não é exposto como um membro da classe, você pode usar o método InvokeOnEventsThread.

Podemos então usar esta classe para verificar alterações no sistema operacional. Como a quantidade de eventos e condições que podem ser monitorados são enormes vou mostrar apenas alguns para que você tenha noção de como podemos usar este recurso.

Lembrando que SystemEvents são eventos disparados pelo sistema em resposta a ações que afetam o ambiente operacional. Não confunda SystemEvents com eventos Win32 que são eventos do Kernell acessíveis por todos os programas. Abaixo temos alguns eventos disparados pela classe SystemEvents:

Pois bem, com base nesses conceitos nosso trabalho será registrar os eventos desejados gravando informações sobre cada um deles em um arquivo texto.

 

Recursos Usados :

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual Basic e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome vbn_logeventos

A seguir inclua os seguintes controles no formulário form1.vb a partir da ToolBox:

  1. Picturebox - picPizza

Disponha os controles conforme mostra a imagem da figura abaixo:

Implementando o código no formulário

Vamos agora definir o código no formulário Form1.vb começando com a declaração dos namespaces:

Imports Microsoft.Win32

No evento Load do formulário digite o código a seguir:

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Define classe SystemEvents para receber as notificações dos eventos
        'quando uma preferência do usuário for alterada, a paleta sofre alteração, a exibição das configurações mudar
        'ou quando ocorrer uma alteração na data/hora

        AddHandler SystemEvents.UserPreferenceChanging, AddressOf SystemEvents_UserPreferenceChanging
        AddHandler SystemEvents.PaletteChanged, AddressOf SystemEvents_PaletteChanged
        AddHandler SystemEvents.DisplaySettingsChanged, AddressOf SystemEvents_DisplaySettingsChanged
        AddHandler Microsoft.Win32.SystemEvents.TimeChanged, AddressOf TimeChangedEvent

        Logger.DeletaLog()
    End Sub

Este código vai definir os eventos que desejamos tratar e deletar o arquivo de log.

A seguir crie uma classe chamada Logger.cs no projeto via menu Project -> Add Class com o seguinte código:

Imports System.IO

Public NotInheritable Class Logger

    Private Sub New()
    End Sub

    ' Calcula o nome do arquivo de log
    Private Shared LogArquivo As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\Log.txt"

    ' Escreve a data e hora atual mais a linha de texto no arquivo de log
    Public Shared Sub RegistraEvento(texto As String)
        File.AppendAllText(LogArquivo, (Convert.ToString(DateTime.Now.ToString() + ": ") & texto) + vbCrLf)
    End Sub

    ' Deleta o arquivo de log
    Public Shared Sub DeletaLog()
        File.Delete(LogArquivo)
    End Sub

End Class

Neste código definimos a classe Logger com os seguintes métodos:

Observe que a classe é NotInheritable, ou seja, é uma classe que não pode ser usada como uma classe base; uma classe que não pode ser herdada.

A seguir no formulário Form1.vb defina os eventos para os quais deseja registrar o log. A seguir temos alguns exemplos:

     'Verifica alterações na data/hora do sistema
    Sub TimeChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        Logger.RegistraEvento("A data/hora do sistema foi alterada" & e.ToString())
    End Sub

    ' Este método é chamado quando uma preferência do usuário é alterada.
    Private Sub SystemEvents_UserPreferenceChanging(ByVal sender As Object, ByVal e As UserPreferenceChangingEventArgs)
        Logger.RegistraEvento("Alteração de preferencias do usuário : " & e.Category.ToString())
    End Sub

    ' Este método é chamado quando a paleta é alterada.
    Private Sub SystemEvents_PaletteChanged(ByVal sender As Object, ByVal e As EventArgs)
        Logger.RegistraEvento("Ocorreu uma alteração na Paleta")
    End Sub

    ' Este método é chamado quando as exibição das configurações muda
    Private Sub SystemEvents_DisplaySettingsChanged(ByVal sender As Object, ByVal e As EventArgs)
        Logger.RegistraEvento("Exibição das configurações foi alterada.")
    End Sub

    ' Verifica as alterações das preferências do usuário
    Sub UserPreferenceChangedEvent(ByVal sender As Object, ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs)
        ' Verifica a categoria alterada
        Select Case e.Category
            Case Microsoft.Win32.UserPreferenceCategory.Color
                Logger.RegistraEvento("Foram alteradas as cores do sistema")
            Case Microsoft.Win32.UserPreferenceCategory.Screensaver
                Logger.RegistraEvento("Foi alterado o screensaver do sistema")
            Case Microsoft.Win32.UserPreferenceCategory.Window
                Logger.RegistraEvento("Foram alteradas dimensões ou características do sistema")
        End Select
    End Sub

    Private Sub picPizza_MouseEnter(sender As Object, e As EventArgs) Handles picPizza.MouseEnter
        Logger.RegistraEvento("MouseEnter")
    End Sub

    Private Sub picPizza_MouseClick(sender As Object, e As MouseEventArgs) Handles picPizza.MouseClick
        Logger.RegistraEvento("MouseClick")
    End Sub

    Private Sub picPizza_MouseLeave(sender As Object, e As EventArgs) Handles picPizza.MouseLeave
        Logger.RegistraEvento("MouseLeave")
    End Sub

    Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
        Logger.RegistraEvento("Form SizeChanged")
    End Sub

Executando o projeto iremos obter o resultado abaixo após realizar algumas operações e abrir o arquivo de Log:

Você pode ajustar o código incluindo muitas personalizações para atender o seu objetivo. Como por exemplo:

Pegue o código do projeto aqui :   vbn_logeventos.zip

"E o mundo passa, e a sua concupiscência; mas aquele que faz a vontade de Deus permanece para sempre."
1 João 2:17

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET ?

 

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti