'Para saber el espacio libre de un disco duro Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long 'en cualquier parte del programa... Dim strRootPathName As String Dim lngSectorsPerCluster As Long Dim lngBytesPerSector As Long Dim lngNumberOfFreeClusters As Long Dim lngTotalNumberOfClusters As Long Dim strDrive As String Dim strMessage As String Dim lngTotalBytes As Long Dim lngFreeBytes As Long strDrive = "C:\" 'drive letter If GetDiskFreeSpace(strDrive, lngSectorsPerCluster, lngBytesPerSector, lngNumberOfFreeClusters, lngTotalNumberOfClusters) = 0 Then strMessage = strMessage & vbCrLf & "An error occurred." Else strMessage = strMessage & vbCrLf & "Sectors Per Cluster: " & Format$(lngSectorsPerCluster) strMessage = strMessage & vbCrLf & "Bytes Per Sector: " & Format$(lngBytesPerSector) strMessage = strMessage & vbCrLf & "Free Clusters: " & Format$(lngNumberOfFreeClusters) strMessage = strMessage & vbCrLf & "Total Clusters: " & Format$(lngTotalNumberOfClusters) lngTotalBytes = lngTotalNumberOfClusters * lngSectorsPerCluster * lngBytesPerSector strMessage = strMessage & vbCrLf & "Total Bytes: " & Format$(lngTotalBytes) lngFreeBytes = lngNumberOfFreeClusters * lngSectorsPerCluster * lngBytesPerSector strMessage = strMessage & vbCrLf & "Bytes Free: " & Format$(lngFreeBytes) strMessage = strMessage & vbCrLf & "Percent Used: " & Format$(1 - (lngFreeBytes / lngTotalBytes), "0.00%") End If MsgBox (strMessage)