Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Dicas de Programação #11

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:

Anónimo disse...

Excelente artigo!

Não pensei que fosse possivel faz estas verificações o que pode ser bastante util!

Obrigado e continuação :)



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject
Google-Translate-ChineseGoogle-Translate-Portuguese to FrenchGoogle-Translate-Portuguese to GermanGoogle-Translate-Portuguese to ItalianGoogle-Translate-Portuguese to JapaneseGoogle-Translate-Portuguese to EnglishGoogle-Translate-Portuguese to RussianGoogle-Translate-Portuguese to Spanish

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico