
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).