Um Site sem Nome  

Provided By CGISpy.com
 

Informática
Visual Basic
VB & DirectX
Ficção Científica
Star Wars
Literatura
Diversos
Fanfiction
Star Wars
Star Trek
Arquivo X
Matérias
Academia
Planetary System
Galeria
Fan Art
Desenhos
Imagens
Biblioteca
Ponto de Vista
Tecnologia
Diversos
Interatividade
Fórum
Livro de Visitas
Mailing List
Links
Sobre
Contato
Divulgação
Créditos
Mapa do Site
Downloads

 

 

Visual Basic

 

Retornando informações sobre drives

 

Obs: o símbolo indica que o código foi "quebrado" em mais linhas para que possa ser exibido na tela, sendo que deve constar em apenas uma linha no programa.

Digamos que você está fazendo um pequeno programa e precisa verifciar algumas informações a respeito dos drives existentes no computador, tais como nome do volume, espaço livre, entre outros.
Através deste pequeno projeto veremos como utilizar algumas funções da API do Windows que permitem obter diversas informações sobre os drives, tanto locais como de rede, de um computador.
As funções que serão vistas são:
GetCurrentDirectory: retorna o diretório atual.
GetDiskFreeSpace: retorna o espaço livre disponível em uma unidade de disco.
GetDriveType: retorna qual o tipo do drive (fixo, drive de CD-ROM, disquete, etc...)
GetSystemDirectory: retorna a localização do diretório System do Windows.
GetTempPath: retorna o caminho da pasta que é usada para armazenar arquivos temporários.
GetVolumeInformation: retorna diversas informações sobre a unidade, entre elas o número de série e o nome do volume.
GetWindowsDirectory: retorna a localização do diretório Windows.

Acima temos a imagem da tela do programa, na qual são exibidas diversas informações: tipo da unidade, espaço livre, nome do volume, número de série do volume, nome do sistema de arquivos (que pode ser FAT, FAT32, NTFS, etc.), bem como os diretórios do Windows, do System e o diretório atual.
A seguir vamos ver como este programa foi feito, com a listagem do código fonte.
Você pode pegar o projeto destepequeno programa, basta clicar no link no final desta página.

 

Declarando as funções da API a serem usadas

A este projeto foi primeiramento adicionado um módulo, no qual indicamos ao VB quais serão as funções da API do Windows que iremos utilizar. Esta indicação é feita através do comando Declare:

Declare Function GetCurrentDirectory Lib "kernel32" Alias 
"GetCurrentDirectoryA" (ByVal nBufferLength As Long, ByVal 
lpBuffer As String) As Long

Declare Function GetDiskFreeSpace Lib "kernel32" Alias 
"GetDiskFreeSpaceA" (ByVal lpRootPathName As String, 
lpSectorsPerCluster As Long, lpBytesPerSector As Long, 
lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters 
As Long) As Long

Declare Function GetDriveType Lib "kernel32" Alias 
"GetDriveTypeA" (ByVal nDrive As String) As Long

Declare Function GetSystemDirectory Lib "kernel32" Alias 
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal 
nSize As Long) As Long

Declare Function GetTempPath Lib "kernel32" Alias 
"GetTempPathA" (ByVal nBufferLength As Long, ByVal 
lpBuffer As String) As Long

Declare Function GetVolumeInformation Lib "kernel32" 
Alias "GetVolumeInformationA" (ByVal lpRootPathName As 
String, ByVal lpVolumeNameBuffer As String, ByVal 
nVolumeNameSize As Long, lpVolumeSerialNumber As Long, 
lpMaximumComponentLength As Long, lpFileSystemFlags As 
Long, ByVal lpFileSystemNameBuffer As String, ByVal 
nFileSystemNameSize As Long) As Long

Declare Function GetWindowsDirectory Lib "kernel32" 
Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, 
ByVal nSize As Long) As Long

Juntamente com as funções declaramos também algumas constantes que serão utilizadas:

'Constantes utilizadas por GetDriveType
Public Const DRIVE_CDROM = 5
Public Const DRIVE_FIXED = 3
Public Const DRIVE_RAMDISK = 6
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_REMOTE = 4

 

Implementando o formulário

Depois de criado o módulos e especificado as funções usadas, criamos então um formulário que irá nos mostrar as informações desejadas. Neste form adicionados Labels para exibição de informações e um controle DriveListBox, que nos permitirá selecionar o drive que queremos analisar.
No evento Change do contrile DriveListBox está todo o código responsável pelo retorno das informações. Assim, quando selecionarmos um drive da lista, o programa verificará as informações sobre ele e mostrará na tela.

Private Sub Drive1_Change()

Dim lngSectorPerCluster As Long
Dim lngBytesPerCluster As Long
Dim lngFreeClusters As Long
Dim lngTotalClusters As Long
Dim nBytes As Byte
Dim strDir As String
Dim strDrive As String, strSize As String
Dim varResult
Dim lngShortSpace As Long
nBytes = 255
strDir = String(nBytes, 0)
strDrive = String(nBytes, 0)
strDrive = ReturnDriveName(Drive1.Drive)
'Determina o espaço livre em disco
varResult = GetDiskFreeSpace(strDrive, 
lngSectorPerCluster, lngBytesPerCluster, 
lngFreeClusters, lngTotalClusters)
lbcFreeSpace.Caption = Format(lngSectorPerCluster * 
lngBytesPerCluster * lngFreeClusters, "###,###,###,###,###")
lbcFreeSpace.Caption = lbcFreeSpace.Caption & " bytes livres"
'Verifica o tipo da unidade
varResult = GetDriveType(strDrive)
Select Case varResult
   Case DRIVE_REMOVABLE
      lbcDriveType.Caption = "Disquete flexível ou 
drive removível."
   Case DRIVE_FIXED
      lbcDriveType.Caption = "Drive fixo ou disco rígido."
   Case DRIVE_REMOTE
      lbcDriveType.Caption = "Drive remoto."
   Case DRIVE_CDROM
      lbcDriveType.Caption = "Drive de CD-ROM."
   Case DRIVE_RAMDISK
      lbcDriveType.Caption = "Drive virtual."
End Select
Dim strVolumeName As String
Dim lngVolumeName As Long
Dim lngSerialNumber As Long
Dim lngMaxCompLenght As Long
Dim lngFileSystemFlags As Long
Dim strFileSystemName As String
Dim lngFileSystemSize As Long
lngVolumeName = 255
strVolumeName = String(lngVolumeName, 0)
lngFileSystemSize = 255
strFileSystemName = String(lngFileSystemSize, 0)
varResult = GetVolumeInformation(strDrive, strVolumeName, 
lngVolumeName, lngSerialNumber, lngMaxCompLenght, 
lngFileSystemFlags, strFileSystemName, lngFileSystemSize)
If varResult <> 0 Then
    lbcVolumeName.Caption = strVolumeName
    lbcSerialNumber.Caption = lngSerialNumber
    lbcFileSystem.Caption = strFileSystemName
Else
    MsgBox "Impossível retornar informações sobre a 
unidade!", vbCritical, "Um Site sem Nome"
    lbcVolumeName.Caption = ""
    lbcSerialNumber.Caption = ""
    lbcFileSystem.Caption = ""
End If
End Sub

A função GetFreeDiskSpace nos retorna o número de setores por cluster, o número de bytes por setor, o número de setores livres e o número total de setores no disco. Portanto, para se saber qual o espaço livre disponível, basta fazer o seguinte cálculo:

setores por cluster * bytes por clusters * clusters livres

Esta mesma função pode ser usada também para retornar o tamanho da unidade, substituindo-se, na fórmula, os clusters livres pelo número total de clusters.

Foram listadas aqui apenas as partes essenciais do programa. Para ver todos os seus recursos, faça o download do projeto (criado em Visual Basic 5 Pro).

Está disponível para download o código-fonte do projeto, criado em VB5:
vb_project4.zip - 4 kb

 

 

 

 
   
26.08.2000
 
 
2000 - Rashi, an alien in Earth
Todas as marcas citadas são de propriedade de seus respectivos fabricantes.
 
1