VB.NET - Obtendo informações do Disco Rígido
No artigo de hoje eu vou mostrar como podemos obter informações do disco rígido local usando os recursos dos namespaces System.Management e System.Management.Instrumentation em uma aplicação Windows Forms usando a linguagem VB .NET. |
O namespace System.Management fornece acesso a um rico conjunto de
informação e gestão de eventos sobre o sistema, dispositivos e aplicativos
instrumentados para a infraestrutura do Windows Management
Instrumentation (WMI).
Os aplicativos e serviços podem consultar informação de gestão
(como a quantidade de espaço livre que resta no disco, qual a atual utilização
da CPU, como o banco de dados de um determinado aplicativo está conectado, e
muito mais), usando as classes derivadas de ManagementObjectSearcher
e ManagementQuery ou uma variedade de eventos de gerenciamento usando a
classe ManagementEventWatcher. Os dados acessíveis podem ser de
componentes gerenciados e não gerenciados no ambiente distribuído.
O namespace System.Management.Instrumentation
fornece as classes necessárias para instrumentar aplicativos para gerenciamento
e expondo suas informações de gestão e eventos através do WMI aos potenciais
consumidores.
Os consumidores, como o Microsoft Application Center ou Microsoft
Operations Manager podem gerenciar seu aplicativo facilmente, e a
monitoração e configuração do seu aplicativo estarão disponíveis para os scripts
de administrador ou outras aplicações, tanto para componentes gerenciados como
não gerenciados.
É muito fácil instrumentar o aplicativo usando o atributo personalizado
InstrumentationClass em classes que você deseja expor.
Neste artigo eu vou mostrar como usar esses recursos em uma aplicação Windows forms para obter as informações do disco rígido como: o número de Série, o espaço livre, o tamanho do disco, o tipo do disco, etc.
Recursos usados:
Criando o projeto no Visual Studio 2013 Express for windows desktop
Abra o VS 2013 Express for windows desktop e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome DiscoRigido_Info e clique no botão OK;
Formulário principal do projeto form1.vb inclua os seguinte controles a partir da ToolBox:
1 Label
1 Combobox - cboDrive (valores de A até Z)
7 Buttons - btnSerial, btnrEspacoLivre, btnTamanho, btnTipo, btnInfoSistema, btnModelo e btnInfoDispositivos
1 Label - lblInfo
Disponha os controles no formulário form1.vb conforme o leiaute abaixo:
Vamos agora incluir uma referência aos namespaces System.Management e System.Management.Instrumentation em nosso projeto.
No menu PROJECT clique em Add Reference e a seguir selecione os namespaces conforme abaixo e clique no botão OK;
Vamos incluir uma classe no projeto chamada DiscoRigido onde iremos definir métodos estáticos para obter as informações do disco rígido.
No menu PROJECT clique em Add Class e informe o nome DiscoRigido.
Após isso declare no início dessa classe os namespaces:
Imports
System.ManagementImports
System.Management.InstrumentationA seguir vamos definir o código abaixo na classe DiscoRigido:
Public Class DiscoRigido
Shared mo_HD As ManagementObject
Private Shared Function DiscoInfo(ByVal strDrive As String) As ManagementObject
'Verifica se a letra do drive foi informada. O padrão é a letra C
If strDrive = "" OrElse strDrive Is Nothing Then
strDrive = "C"
End If
Try
'Usa Win32_LogicalDisk para obter as propriedades do HD
Dim moHD As New ManagementObject("Win32_LogicalDisk.DeviceID=""" + strDrive + ":""")
Return moHD
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function NumeroSerial(ByVal strDrive As String) As String
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega o Serial
Return mo_HD("VolumeSerialNumber").ToString()
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function Tamanho(ByVal strDrive As String) As Double
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega o tamanho do HD
Return Convert.ToDouble(mo_HD("Size"))
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function EspacoLivre(ByVal strDrive As String) As Double
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega o espaço livre
Return Convert.ToDouble(mo_HD("FreeSpace"))
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function TipoDrive(ByVal strDrive As String) As String
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega o tipo de drive
Return mo_HD("DriveType").ToString()
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function Sistema(ByVal strDrive As String) As String
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega info do sistema
Return mo_HD("FileSystem").ToString()
Catch ex As Exception
Throw
End Try
End Function
Public Shared Function Modelo(ByVal strDrive As String) As String
Try
mo_HD = DiscoInfo(strDrive)
mo_HD.Get()
'Pega tipo da media
Return mo_HD("MediaType").ToString()
Catch ex As Exception
Throw
End Try
End Function
End Class
|
Neste código temos 6 métodos estáticos(Shared) que podem ser usados para obter a informação sobre um dispositivo instalado no computador local.
Todos esses métodos usam o método privado DiscoInfo() que retorna um objeto do tipo ManagementObject contendo as propriedades do dispositivo indicado e a seguir extraem a informação específica usando a classe Win32_LogicalDisk que representa uma fonte de dados que resolve para um verdadeiro dispositivo de armazenamento local em um sistema de computador com a plataforma Windows.
Para usar essa classe vamos definir no formulário form1.vb o código em cada evento Click dos botões de comando.
A seguir temos o código do formulário:
Imports System.Management
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboDrive.SelectedIndex = 2
End Sub
Private Sub btnSerial_Click(sender As Object, e As EventArgs) Handles btnSerial.Click
If cboDrive.SelectedIndex <> -1 Then
Try
lblInfo.Text = "Serial : " & DiscoRigido.NumeroSerial(cboDrive.Text).ToString
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnEspacoLivre_Click(sender As Object, e As EventArgs) Handles btnEspacoLivre.Click
If cboDrive.SelectedIndex <> -1 Then
Try
Dim dblLivre As Double = 0
'Espaço
dblLivre = Math.Round(DiscoRigido.EspacoLivre(cboDrive.Text).ToString / 1024 / 1024 / 1024)
'Divide 3 vezes por 1024 ( Byte ) para obter GB
'1 KB = 1024 - KiloByte
'1 MB = 1024 ^ 2 - MegaByte
'1 GB = 1024 ^ 3 - GigaByte
'1 TB = 1024 ^ 4 - TeraByte
'1 PB = 1024 ^ 5 - PetaByte
'1 EB = 1024 ^ 6 - ExaByte
'1 ZB = 1024 ^ 7 - ZettaByte
'1 YB = 1024 ^ 8 - YottaByte
'1 BB = 1024 ^ 9 - BrontoByte
lblInfo.Text = "Livres : " & dblLivre.ToString() + " GB"
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnTamanho_Click(sender As Object, e As EventArgs) Handles btnTamanho.Click
If cboDrive.SelectedIndex <> -1 Then
Try
Dim dblTamanho As Double = 0
'tamanho
dblTamanho = Math.Round(DiscoRigido.Tamanho(cboDrive.Text).ToString / 1024 / 1024 / 1024)
'Divide 3 vezes por 1024 ( Byte ) para obter GB
'1 KB = 1024 - KiloByte
'1 MB = 1024 ^ 2 - MegaByte
'1 GB = 1024 ^ 3 - GigaByte
'1 TB = 1024 ^ 4 - TeraByte
'1 PB = 1024 ^ 5 - PetaByte
'1 EB = 1024 ^ 6 - ExaByte
'1 ZB = 1024 ^ 7 - ZettaByte
'1 YB = 1024 ^ 8 - YottaByte
'1 BB = 1024 ^ 9 - BrontoByte
lblInfo.Text = "Tamanho : " & dblTamanho.ToString & " GB"
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnTipo_Click(sender As Object, e As EventArgs) Handles btnTipo.Click
If cboDrive.SelectedIndex <> -1 Then
Try
Dim strDriveType As String = Nothing
'determina o tipo do drive
Select Case DiscoRigido.TipoDrive(cboDrive.Text).ToString
Case "0"
strDriveType = "Desconhecido"
Exit Select
Case "1"
strDriveType = "Readable"
Exit Select
Case "2"
strDriveType = "Writable"
Exit Select
Case "3"
strDriveType = "Read / Write Suportado"
Exit Select
Case "4"
strDriveType = "Write Once"
End Select
lblInfo.Text = "Tipo : " & strDriveType
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnInfoSistema_Click(sender As Object, e As EventArgs) Handles btnInfoSistema.Click
If cboDrive.SelectedIndex <> -1 Then
Try
lblInfo.Text = "Sistema : " & DiscoRigido.Sistema(cboDrive.Text).ToString
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnModelo_Click(sender As Object, e As EventArgs) Handles btnModelo.Click
If cboDrive.SelectedIndex <> -1 Then
Try
lblInfo.Text = "Modelo : " & DiscoRigido.Modelo(cboDrive.Text).ToString
Catch ex As Exception
lblInfo.Text = "Não Disponível " & ex.Message
End Try
End If
End Sub
Private Sub btnInfoDispositivos_Click(sender As Object, e As EventArgs) Handles btnInfoDispositivos.Click
'Obtém todos os dispositivos
Dim mosDisks As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
' percorre cada objeto (disco)
For Each moDisk As ManagementObject In mosDisks.[Get]()
' exibe o dispositivo na label
lblInfo.Text = lblInfo.Text & moDisk("Model").ToString() & vbCrLf
Next
End Sub
End Class
|
No evento Load do formulário definimos o valor padrão a ser exibido no controle Combobox cboDrive como sendo igual a 2 ou seja o valor C.
A seguir em cada evento Click usando a classe DiscoRigido e o método correspondente para retornar a informação desejada.
Apenas no último botão de comando estamos usando uma instrução : "SELECT * FROM Win32_DiskDriv" e para retornar todos os dispositivos instalados
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui: DiscoRigido_Info.zip
Mas faço-vos saber, irmãos, que o
evangelho que por mim foi anunciado não é segundo os homens.
Porque não o recebi, nem aprendi de homem algum, mas pela revelação de Jesus
Cristo.
Gálatas 1:11-12
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: