C# - Pegar o UpTime do SO

Ok vamos pegar o tempo total que o sistema esta ligado !


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
 
namespace wmi_get_uptime
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private DateTime ParseCIM(string date)
        {
            //datetime object to store the return value
            DateTime parsed = DateTime.MinValue;
 
            //check date integrity
            if (date != null && date.IndexOf('.') != -1)
            {
                //obtain the date with miliseconds
                string newDate = date.Substring(0, date.IndexOf('.') + 4);
 
                //check the lenght
                if (newDate.Length == 18)
                {
                    //extract each date component
                    int y = Convert.ToInt32(newDate.Substring(0, 4));
                    int m = Convert.ToInt32(newDate.Substring(4, 2));
                    int d = Convert.ToInt32(newDate.Substring(6, 2));
                    int h = Convert.ToInt32(newDate.Substring(8, 2));
                    int mm = Convert.ToInt32(newDate.Substring(10, 2));
                    int s = Convert.ToInt32(newDate.Substring(12, 2));
                    int ms = Convert.ToInt32(newDate.Substring(15, 3));
 
                    //compose the new datetime object
                    parsed = new DateTime(y, m, d, h, mm, s, ms);
                }
            }
 
            //return datetime
            return parsed;
        }
 
        public TimeSpan GetSystemUptime()
        {
            //timespan object to store the result value
            TimeSpan up = new TimeSpan();
 
            //management objects to interact with WMI
            ManagementClass m = new ManagementClass("Win32_OperatingSystem");
 
            //loop throught the WMI instances
            foreach (ManagementObject instance in m.GetInstances())
            {
                //get the LastBootUpTime date parsed (comes in CIM_DATETIME format)
                DateTime last = ParseCIM(instance["LastBootUpTime"].ToString());
 
                //check it value is not DateTime.MinValue
                if (last != DateTime.MinValue)
                    //get the diff between dates
                    up = DateTime.Now - last;
            }
 
            //return the uptime TimeSpan
            return up;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            //Como chamar !
            textBox1.Text = GetSystemUptime().ToString();
 
        }
 
    }
}

Segue ScreenShot =]


Fácil não ? Qualquer coisa de um grito !


Renomear arquivos em massa

Nunca estiveram em uma situação de ter que renomear vários arquivos manualmente?
Bom, nós sim! Por isso desenvolvemos uma rotina que renomeia arquivos em massa. (Basta ter uma lógica por trás.)

Exemplo: Tenho em um determinado diretório vários arquivos com o formato .csv, porém gostaria de alterar todos eles para a extensão .xls!

Perfeito, em vez de perder algum tempo fazendo essa mesma função manualmente, crie uma rotina que faça isso para você.

Veja como:

Antes de aplicar a função:







Imports System.IO

Public Class frmRenomearArquivos

Private Sub btnbuscarPasta_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles
btnDefinirDiretório.Click
If Me.dirCaminho.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.txtCaminho.Text = Me.dirCaminho.SelectedPath
Me.BuscarArquivos(Me.txtCaminho.Text)
End If
End Sub

Private Sub btnRenomear_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles
btnRenomear.Click
If String.IsNullOrEmpty(Me.txtCaminho.Text) Then
MessageBox.Show("Defina o diretório!", "Atanção!", _
MessageBoxButtons
.OK, MessageBoxIcon.Stop)
Me.btnDefinirDiretório.Focus()
Exit Sub
End If

If String.IsNullOrEmpty(Me.txtLocalizar.Text) Or _
String
.IsNullOrEmpty(Me.txtSubstituir.Text) Then
MessageBox.Show("Preencher campos obrigatórios!", "Atenção!", _
MessageBoxButtons
.OK, MessageBoxIcon.Stop)
Me.txtLocalizar.Focus()
Exit Sub
End If

Try
Me.RenomearArquivos()
Me.BuscarArquivos(Me.txtCaminho.Text)

Me.txtLocalizar.Clear()
Me.txtSubstituir.Clear()
Me.txtLocalizar.Focus()
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Private Sub txtLocalizar_GotFocus(ByVal sender As Object, _
ByVal
e As System.EventArgs) _
Handles txtLocalizar.GotFocus
Me.txtLocalizar.SelectAll()
End Sub

Private Sub txtSubstituir_GotFocus(ByVal sender As Object, _
ByVal
e As System.EventArgs) _
Handles txtSubstituir.GotFocus
Me.txtSubstituir.SelectAll()
End Sub

''' <summary>
''' Renomeia os arquivos
''' </summary>
Private Sub RenomearArquivos()
For Each Arquivo As String In Directory.GetFiles(Me.txtCaminho.Text)
Dim NovoNome As String = String.Empty
Dim NomeArquivo As String = String.Empty

' Extrai o diretório do nome do arquivo
If Arquivo.IndexOf("\") >= 0 Then
NomeArquivo = Arquivo.Substring(0, Arquivo.LastIndexOf("\"))
Else
NomeArquivo = System.Environment.CurrentDirectory
End If

' Define o novo nome para o arquivo
NovoNome = Replace(Arquivo.Substring(Arquivo.LastIndexOf("\") + 1), _
Me
.txtLocalizar.Text, Me.txtSubstituir.Text)

' Renomeia o arquivo
System.IO.File.Move(Arquivo, NomeArquivo & "\" & NovoNome)

MessageBox.Show("Os arquivos foram renomeados corretamente!", "Confirmação", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Next
End Sub

''' <summary>
''' Preenche o ListBox com o nome dos arquivos
''' que estiverem no diretório selecionado

''' </summary>
''' <param name="pDiretorio">Diretório dos arquivos a serem renomeados</param>
Private Sub BuscarArquivos(ByVal pDiretorio As String)
Me.lsbArquivos.Items.Clear()
If Directory.Exists(pDiretorio) Then
For Each Arquivo As String In Directory.GetFiles(pDiretorio)
Me.lsbArquivos.Items.Add(Arquivo.Substring(Arquivo.LastIndexOf("\") + 1))
Next
Else
MessageBox.Show("Diretório inexistente!" & vbCrLf & pDiretorio, "Erro!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub

End Class

Após aplicar a função (Resultado):
Resultado
Download do arquivo completo: RenomearArquivos.zip


Criptografia VB.NET

Ola meu povo, hoje vou mostrar como podemos criptografar dados no VB.NET...
Crie a seguinte classe

Imports System.Text
Imports System.Security.Cryptography
 
Public Class cls_crypto
 
    Private Shared TripleDES As New TripleDESCryptoServiceProvider
    Private Shared MD5 As New MD5CryptoServiceProvider
 
    ' Definição da chave de encriptação/desencriptação 
    Private Const key As String = "SENHA_DE_SUA_PREFERENCIA"
 
    ''' <summary> 
    ''' Calcula o MD5 Hash  
    ''' </summary> 
    ''' <param name="value">Chave</param> 
    Public Shared Function MD5Hash(ByVal value As StringAs Byte()
 
        ' Converte a chave para um array de bytes  
        Dim byteArray() As Byte = ASCIIEncoding.UTF8.GetBytes(value)
        Return MD5.ComputeHash(byteArray)
 
    End Function
 
    ''' <summary> 
    ''' Encripta uma string com base em uma chave 
    ''' </summary> 
    ''' <param name="stringToEncrypt">String a encriptar</param> 
    Public Function Encrypt(ByVal stringToEncrypt As StringAs String
 
        Try
 
            ' Definição da chave e da cifra (que neste caso é Electronic 
            ' Codebook, ou seja, encriptação individual para cada bloco) 
            TripleDES.Key = cls_crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB
 
            ' Converte a string para bytes e encripta 
            Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
            Return Convert.ToBase64String _
                (TripleDES.CreateEncryptor(). _
TransformFinalBlock(Buffer, 0, Buffer.Length))
 
        Catch ex As Exception
 
            MessageBox.Show(ex.Message, My.Application.Info.Title, _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
 
        End Try
 
    End Function
 
    ''' <summary> 
    ''' Desencripta uma string com base em uma chave 
    ''' </summary> 
    ''' <param name="encryptedString">String a decriptar</param> 
    Public Function Decrypt(ByVal encryptedString As StringAs String
 
        Try
 
            ' Definição da chave e da cifra 
 
            If encryptedString = String.Empty Then Return String.Empty
            TripleDES.Key = cls_crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB
 
            ' Converte a string encriptada para bytes e decripta 
            Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
            Return ASCIIEncoding.ASCII.GetString _
                (TripleDES.CreateDecryptor(). _
TransformFinalBlock(Buffer, 0, Buffer.Length))
 
        Catch ex As Exception
 
            MessageBox.Show(ex.Message, My.Application.Info.Title, _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
 
        End Try
 
    End Function
 
End Class
 

Nesse cenário criamos a classe, agora em um form  vamos chamar a classe.

Dim cripto As New cls_crypto
Textbox.text = cripto.Encrypt("TEXTO_A_SER_CRIPTOGRAFADO")
 
E para descriptografar Messagebox.show(cripto.Decrypt(Textbox1.text))
 
Abraços 



AndAlso // VB.NET

AndAlso 

O operador lógico AndAlso, assim como o OrElse, implementa o chamado curto circuito. Como assim? Pois bem. Pra quem está acostumado com C# pode não saber, mas no VB.NET os operadores AND e OR fazem com que toda a expressão composta com operadores lógicos seja avaliada. Ou seja, em uma expressão composta com AND, se a primeira expressão for igual a FALSE, o VB irá avaliar a segunda expressão. O que quero dizer é que, no caso de um AND, se a primeira expressão for igual a false, mesmo que a segunda seja verdadeira, aquele bloco de código condicional não será executado (lembre-se: False AND True é igual a false).


C# Verificar privilégios administrativos

Há algum tempo atrás precisei de verificar dentro do meu programa se ele estava sendo iniciado com privilégios administrativos, a solução é bem simples para esse caso !

Mãos na massa !

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Security.Principal;
 
namespace Admin
{
    static class Program
    {
        /// 
        /// The main entry point for the application.
        /// 
        [STAThread]
        static void Main()
        {
            try
            {
                
                //Ligando os Recursos
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
 
                //Istanciando e catando identidades
                WindowsIdentity Identidade = WindowsIdentity.GetCurrent();
                WindowsPrincipal Principal = new WindowsPrincipal(Identidade);
 
                //Verificando
                if (!Principal.IsInRole(WindowsBuiltInRole.Administrator))
                {
                    MessageBox.Show("Usuário sem Privilégios administrativos");
                    Application.Exit();
                }
                else
                {
 
                    MessageBox.Show("Usuário com Privilégios administrativos");
                    Application.Run(new Form1());
 
                }
                                
            }
            catch (Exception ex)
            {
                if (ex != null) 
                {
 
                    MessageBox.Show("Erro ao verificar seus dados !");
 
                }
            }
                        
        }
    }
}

Esta ai... simples como a vida deve ser !
e vamu que vamuuu !!!


Exercicios C#

 
    A vida não é fácil para quem está aprendendo com a ajuda dos tutoriais, abaixo seguem alguns exercícios fáceis, e é uma forma de pôr em prática o que se aprendeu, NÃO são de nossa autoria, mas não teremos nenhum problema em ajudar na resolução de alguns.
  • Crie um programa que ao clicar num botao abra uma nova janela. A janela deve chamar-se Nova janela e deverá conter apenas a frase Portugal a programar.


  • Crie um programa que leia um texto escrito numa caixa de texto e ao clicar num botão altere o nome do programa para o texto inserido na caia de texto.


  • Crie um programa que leia texto de duas caixas de texto e apresente esse texto junto num rótulo.

  • Conversor numeros para Extenso !

    Testando vários desses tutoriais e códigos de como transformar numeros a partir de valores monetários em strings, percebemos que cada um apresentava uma deficiência, entao resolvemos adaptar a nosso modo e incluir algumas funcionalidades descritas abaixo.

    Funcionalidades
    • Valores numéricos Monetários em Valores por extenso
    • Valores Numericos em Valores Porcentagem.
    • Valores Numericos em strings.

    Idiomas
    • Portugues PT-BR
    • Portugues PT-PT

    Moedas
    • Reais (Brasil)
    • Euro (Europa)

    A dll Funcionará em .NET Framwork 3.0 e esta sendo desenvolvida no Visual Studio 2010.



    Entao Siga, baixe, entre, ajude, reclame... mas coopere ! pois o Mundo não para

    O link vai logo abaixo....

    [[[ --- String Toolkit.NET --- ]]] 

    E vamu que vamuuuu...


    Capturando o evento Click do botão Fechar

    Uma das práticas utilizando esse evento é solicitar uma confirmação de encerramento do sistema somente ao clicar no botão fechar.
    Caso exista algum método de encerramento incluso no sistema não precisará passar pela mensagem de confirmação.
    Ou também se for preciso desligar o computador sem essa mensagem.


    Exemplo de mensagem de confirmação:












    Código Fonte:

    ''' <summary>
    ''' Define ou retorna se o sistema deverá ser encerrado
    ''' </summary>
    Private PodeFechar As Boolean = True

    ' Constante do botão fechar
    Private Const WM_CLOSE As Integer = CInt(&H10)

    Protected Overrides Sub WndProc(ByRef pM As System.Windows.Forms.Message)
    If pM.Msg = WM_CLOSE Then
    If MessageBox.Show("Deseja encerrar o sistema?", _
    "Encerrar sistema!", _
    MessageBoxButtons.YesNo, _
    MessageBoxIcon.Question) = _
    Windows.Forms.DialogResult.Yes Then
    Me.PodeFechar = True
    Else
    Me.PodeFechar = False
    End If
    End If
    MyBase.WndProc(pM)
    End Sub

    Private Sub frmEventoFechar_FormClosing(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.FormClosingEventArgs) _
    Handles Me.FormClosing
    If Me.PodeFechar = False Then
    e.Cancel = True
    Me.PodeFechar = True
    End If
    End Sub

    Apostilas básica sobre o .NET Micro Framework em português.


    Este livro é para iniciantes que querem aprender .NET Micro Framework. Nenhum
    conhecimento prévio é necessário. O livro cobre .NET Micro Framework, Visual C# e C#!
    Se você é um programador, um hobbista ou um engenheiro, você encontrará uma boa
    quantidade de informações neste livro. Este livro não faz nenhuma suposição sobre o que
    você, leitor sabe, é explicado detalhadamente.

    Link Apostila


    Como trabalhar com Timer em Debug Mode

    O problema de se trabalhar com timers na aplicação, é que quando se esta em debug mode o timer é executado continuamente ocorrendo assim de o ponteiro sempre parar lá. Existem programadores o que definem como comentário e no final retiram o comentário. Uma das formas de resolver este pequeno "problema" é indica-lo com não fazendo parte do debug DebuggerStepThrough da namespace Diagnostics. Exemplo:

    VB.NET
    <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub Timer1_Tick(sender As System.Object, _
                                e As System.EventArgs) Handles Timer1.Tick
            NumericUpDown1.Value += 1
        End Sub

    C#.NET
    [System.Diagnostics.DebuggerStepThrough]
        private void timer1_Tick(object sender, EventArgs e)
        {
            numericUpDown1.Value += 1;
        }

    Espero que ajude !

    C#, Obter hora de maquinas da rede

    Segue abaixo uma elegante classe em C# para buscar a hora em micros da rede...


    namespace GetHora
    {
        public class NewHour
            
        {
            public DateTime GetNovaHora (string strMaquina)
            {
                IntPtr handle = IntPtr.Zero;
                DateTime dt;
                if (NetRemoteTOD("\\\\" + strMaquina, ref handle) == NERR_Success) 
    
                { 
                    TIME_OF_DAY_INFO time = (TIME_OF_DAY_INFO) _
    Marshal.PtrToStructure ( handle, typeof( TIME_OF_DAY_INFO ) );
                        
                    dt = new DateTime ((int)time.tod_year, 
                                    (int)time.tod_month, 
                                    (int)time.tod_day, 
                                    (int)(time.tod_hours - 
                                    (time.tod_timezone / 60)), 
                                    (int)time.tod_mins, 
                                    (int)time.tod_secs);
                        
    
                    uint result = NetApiBufferFree (handle);
                    if (result != NERR_Success)
                    Console.WriteLine ( "Memory cleanup failed: {0}",result );
                    return dt;
                }
    
                return GetNovaHora("localhost");