Detectar alterações no Sistema Operativo
As aplicações estão muitas vezes dependentes de informações do sistema operativo para trabalharem correctamente. Cores utilizadas, fontes utilizadas, utilizador actual do sistema, data/hora, etc, são algumas das coisas que podem influenciar o funcionamento da aplicação. Por exemplo, se uma aplicação faz algo a uma determinada hora e essa hora é modificada, essa tarefa pode não ser efectuada.
Caso se necessite, ou seja, caso exista uma dependência da aplicação de informações do sistema operativo, é possível detectar alterações e tomar decisões.
O seguinte exemplo mostra como detectar algumas alterações no sistema operativo, mostrando uma mensagem informativa. Existem mais condições e eventos que se podem monitorizar, mas para este exemplo apenas serão mostrados alguns.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Cria eventos para algumas alterações no sistema
' (data/hora, sessão e preferências de visualização do utilizador)
AddHandler Microsoft.Win32.SystemEvents.TimeChanged, _
AddressOf TimeChangedEvent
AddHandler Microsoft.Win32.SystemEvents.SessionSwitch, _
AddressOf SessionSwitchEvent
AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _
AddressOf UserPreferenceChangedEvent
End Sub
' Verifica alterações na data/hora do sistema
Sub TimeChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs)
MessageBox.Show("Foi alterada a data/hora do sistema")
End Sub
' Verifica alterações na sessão (logins)
Sub SessionSwitchEvent(ByVal sender As Object, ByVal e As Microsoft.Win32.SessionSwitchEventArgs)
' Verifica qual a alteração efectuada
Select Case e.Reason
Case Microsoft.Win32.SessionSwitchReason.SessionLock
MessageBox.Show("O sistema foi bloqueado")
Case Microsoft.Win32.SessionSwitchReason.SessionUnlock
MessageBox.Show("O sistema foi desbloqueado")
Case Microsoft.Win32.SessionSwitchReason.SessionLogon
MessageBox.Show("Efectuado um novo login no sistema")
Case Microsoft.Win32.SessionSwitchReason.SessionLogoff
MessageBox.Show("Efectuado um novo logout no sistema")
End Select
End Sub
' Verifica alterações às preferências do utilizador
Sub UserPreferenceChangedEvent(ByVal sender As Object, ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs)
' Verifica qual 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
Implementando um FIFO
O namespace System.Collections.Generic possui uma classe que permite implementar, de uma forma muito simples, um FIFO (first-in, first-out). Este método é muito útil em diversas aplicações (ex: produtos numa linha de produção, buffers, etc), mas também para manter os últimos registos de algo.
Para mostrar a utilização desta colecção, Queue, será mostrada criada uma pequena lista de itens e depois será removido um e inserido outro. Um exemplo simples mas certamente muito útil.
''' <summary>
''' Mostra os itens que estão na lista
''' </summary>
Sub showList(ByVal fifoList As Queue(Of String))
For x As Byte = 0 To fifoList.Count – 1
Debug.WriteLine(fifoList(x).ToString)
Next
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim fifo As New Queue(Of String)
' Adiciona itens ao fifo através do método Enqueue()
For x As Byte = 0 To 9
fifo.Enqueue("Item " & x)
Next
' Mostra os dados actuais
showList(fifo)
Stop
' ------------------------------------------
' OUTPUT (Immediate Window):
' ------------------------------------------
' Item 0
' Item 1
' Item 2
' Item 3
' Item 4
' Item 5
' Item 6
' Item 7
' Item 8
' Item 9
' Informação do item que vai sair da lista
Dim fifoNextToLeave As String = fifo.Peek
Debug.WriteLine("Próximo item a sair: " & fifoNextToLeave)
' ------------------------------------------
' OUTPUT (Immediate Window):
' ------------------------------------------
' Próximo item a sair: Item 0
' Remove um item da lista (por ordem) e guarda
' a informação numa variável que será mostrada
Dim fifoOut As String = fifo.Dequeue()
Debug.WriteLine("Item removido: " & fifoOut)
' Adiciona um novo item para manter o mesmo número de itens
fifo.Enqueue("Item 10")
' Mostra os dados finais
showList(fifo)
Stop
' ------------------------------------------
' OUTPUT (Immediate Window):
' ------------------------------------------
' Item 1
' Item 2
' Item 3
' Item 4
' Item 5
' Item 6
' Item 7
' Item 8
' Item 9
' Item 10
' Limpa todos os resultados da lista
fifo.Clear()
End Sub
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
1 comentários:
Excelente artigo!
Não pensei que fosse possivel faz estas verificações o que pode ser bastante util!
Obrigado e continuação :)
Enviar um comentário