Desenvolvimento - C#

Pegando o horário inicial e final do uso do Windows usando C#

Nesse exemplo básico, vamos recuperar as informações vindas quando usuário entra e sai do Windows, são horários úteis quando se deseja realizar auditoria do uso do sistema operacional.

por Ediberto Alves



Quando um usuário inicia o Windows e vai trabalhando durante o dia, um valor é registrado na chave do registro. Para verificarmos isso, no editor de registros(regedit) procure:

HKEY_LOCAL_MACHINE > Software -> Microsoft -> Windows NT -> CurrentVersion -> Prefetcher

Lá encontraremos duas chaves; StartTime, que registra a data que a sessão foi iniciada e EndTime, que registra a data que a sessão do Windows foi encerrado.

Vamos nesse exemplo recuperar o registro na Prefetcher

Criando o Projeto

Abra o Visual Studio e crie uma nova Windows Forms Application


Adicione dois Labels e dois Textboxes no form:


Vamos criar dois métodos, o primeiro vai recuperar as informações provenientes do editor de registro e o segundo método

irá formatar a data que originalmente está no formato Ano/Mês/Dia para o formato brasileiro, Dia/Mês/Ano.

Adicione a using Microsoft.Win32.

No método recuperaTempoUso

        public void recuperaTempoUso()
        {
            RegistryKey regkey;

            // aponta a variavel o caminho do HKEY_LOCAL_MACHINE
            regkey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Prefetcher");

            // atribui aos arrays a data vinda do registro
            string[] SessaoInicial = regkey.GetValue("StartTime").ToString().Split("-");
            string[] SessaoFinal = regkey.GetValue("ExitTime").ToString().Split("-");

            textBox1.Text = obtemDataFormatadaBr(SessaoInicial[0]) +" às "+ SessaoInicial[1];
            textBox2.Text = obtemDataFormatadaBr(SessaoFinal[0])+ " ás "+ SessaoFinal[1];
        }

E no método obtemDataFormatadaBr:

        public string obtemDataFormatadaBr(string pData)
        {
            return DateTime.Parse(pData).ToString("d");
        }

No evento Load do Windows Forms:

        private void Form1_Load(object sender, EventArgs e)
        {
            recuperaTempoUso();
        }

Compile a solução e veja o resultado:


Lembrando que no campo Término consta a última vez que eu saí do Windows.

O mesmo pode ser conferido nas imagens abaixo, do editor de registro:



StartTime


ExitTime

Bom pessoal, espero que esse exemplo possa ajudar. Principalmente quando necessitamos determinar auditorias e inventários de uso.
Fiquem a vontade para implementar esse exemplo.

Para baixar, clique aqui

Ediberto Alves

Ediberto Alves - Desenvolvedor, graduado em Tecnologia em Informática em atuação na área de desenvolvimento de soluções nas plataformas Win32 e Web, usando tecnologias .NET, Delphi e banco de dados Oracle, Firebird, SQL Server há mais de 7 anos. Publica artigos sobre desenvolvimento, tecnologia e outros assuntos no blog: http://edibertoalves.com.br/blog e também, presente nos fóruns da comunidade .NET.