VB .NET - Monitorando as notificações de eventos do Sistema
A classe SystemEvents 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.
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.
A seguir temos alguns dos métodos da classe SystemEvents:
Nome | Descrição |
---|---|
CreateTimer | Cria uma nova janela Timer associado à janela eventos do sistema. |
Equals | Determina se o objeto especificado é igual ao objeto atual. |
Finalize | Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes do objeto ser recuperado por coleta de lixo. |
GetHashCode | Serve como uma função hash para um tipo específico. |
GetType | Obtém o tipo da instância atual. |
InvokeOnEventsThread | Chama o representante especificado usando o segmento que escuta eventos do sistema. |
KillTimer | Encerra o timer especificado por determinada identificação. |
MemberwiseClone | Cria uma cópia superficial do objeto atual |
Podemos então usar esta classe para verificar alterações no sistema operacional e neste artigo vou mostrar alguns exemplos.
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:
DisplaySettingsChanged
- Ocorre quando o usuário altera a exibição das configurações;EventsThreadShutdown
- Ocorre antes da thread que escuta os
eventos do sistema terminar; InstalledFontsChanged
- Ocorre quanto o usuário inclui ou remove fontes ao sistema;LowMemory
- Ocorre quando o sistema esta rodando abaixo da memória RAM;PaletteChanged
- Ocorre quando o usuário muda para uma aplicação que usa uma paleta
diferença;PowerModeChanged
- Ocorre quando o usuário suspende ou reinicia o sistema;SessionEnded
- Ocorre quando o usuário esta efetuando um logoff
ou um shutdown no sistema;SessionEnding
- Ocorre quando o usuário tenta efetuar um logoff
ou um shutdown no sistema;TimeChanged
- Ocorre quando o usuário muda a hora do sistema;TimerElapsed-
Ocorre quando o timer do Windows expirou;UserPreferenceChanged
-
Ocorre quando uma preferência do usuário sofreu uma mudança;UserPreferenceChanging
- Ocorre quando uma preferência do usuário esta sendo modificada;Criando um exemplo para efetuar a monitoração de eventos
Os namespaces usados no exemplo deste artigo são definidas pelas seguintes declarações:
Imports
System
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.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 End Sub 'Verifica alterações na data/hora do sistema Sub TimeChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs) MessageBox.Show("A data/hora do sistema foi alterada") 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) MessageBox.Show("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) MessageBox.Show("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) MessageBox.Show("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 MessageBox.Show("Foram alteradas as cores do sistema") Case Microsoft.Win32.UserPreferenceCategory.Screensaver MessageBox.Show("Foi alterado o screensaver do sistema") Case Microsoft.Win32.UserPreferenceCategory.Window MessageBox.Show("Foram alteradas dimensões ou características do sistema") End Select End Sub |
Para testar o código acima, execute o projeto e efetue uma alteração relacionada ao evento que estamos monitorando como por exemplo alterar a data do sistema. Você receberá um aviso emitido pela aplicação indicando que o evento esta sendo monitorado.
Podemos usar os recursos da infra-estrutura da plataforma .NET como a classe SystemEvents para criar algo útil como monitorar os eventos para realizar algumas tarefas como gerar um log de auditoria ou não permitir que certas ações seja executadas como não permitir o log off enquanto os dados não forem salvos, etc.
Eu sei é apenas VB .NET mas eu gosto...
Referências:
José Carlos Macoratti