Альтернативы:
lcComputer = "."
CLEAR
loWMIService = GetObject("winmgmts:" ;
+ "{impersonationLevel=impersonate}!\\" + lcComputer + "\root\cimv2")
colDisks = loWMIService.ExecQuery ;
("Select * from Win32_LogicalDisk")
For each loDisk in colDisks
?"Compressed: " + chr(9) + TRANSFORM(loDisk.Compressed)
?"Description: " + chr(9) + loDisk.Description
?"DeviceID: " + chr(9) + loDisk.DeviceID
?"DriveType: " + chr(9) + TRANSFORM(loDisk.DriveType)
?"FileSystem: " + chr(9) + loDisk.FileSystem
?"FreeSpace: " + chr(9) + loDisk.FreeSpace
?"MediaType: " + chr(9) + TRANSFORM(loDisk.MediaType)
?"Name: " + chr(9) + loDisk.Name
?"QuotasDisabled: " + chr(9) + loDisk.QuotasDisabled
?"QuotasIncomplete: " + chr(9) + loDisk.QuotasIncomplete
?"QuotasRebuilding: " + chr(9) + loDisk.QuotasRebuilding
?"Size: " + chr(9) + loDisk.Size
?"SupportsDiskQuotas: " + chr(9) + ;
TRANSFORM(loDisk.SupportsDiskQuotas)
?"SupportsFileBasedCompression: " + chr(9) + ;
TRANSFORM(loDisk.SupportsFileBasedCompression)
?"SystemName: " + chr(9) + loDisk.SystemName
?"VolumeDirty: " + chr(9) + TRANSFORM(loDisk.VolumeDirty)
?"VolumeName: " + chr(9) + loDisk.VolumeName
?"VolumeSerialNumber: " + chr(9) + ;
loDisk.VolumeSerialNumber
Next
LOCAL loFSO, loDrivesCol, loDrive, ;
llIsReadyDrive, lnDriveType, lcDriveType, lnWait
loFSO = CREATEOBJECT('Scripting.FileSystemObject')
loDrivesCol = loFSO.Drives
? "Number of the drives in system is " + ALLTRIM(STR(loDrivesCol.Count))
FOR EACH loDrive IN loDrivesCol
? "Drive : " + loDrive.DriveLetter
lnDriveType = loDrive.DriveType
DO CASE
CASE lnDriveType=1
lcDriveType = [removable]
CASE lnDriveType=2
lcDriveType = [fixed]
CASE lnDriveType=3
lcDriveType = [network]
CASE lnDriveType=4
lcDriveType = [CD-ROM]
CASE lnDriveType=5
lcDriveType = [RAM-disk]
ENDCASE
? "Drive type is: " + lcDriveType
llIsReadyDrive = loDrive.IsReady
? IIF( llIsReadyDrive=.T., [Drive is ready.],[Drive isn't ready.])
IF llIsReadyDrive
? "Available space: " + ALLTRIM(STR(loDrive.AvailableSpace)) + [ bytes.]
? "Free space: " + ALLTRIM(STR(loDrive.FreeSpace)) + [ bytes.]
? "Total size: " + ALLTRIM(STR(loDrive.TotalSize)) + [ bytes.]
? "Path: " + loDrive.Path
? "Volume name: " + loDrive.VolumeName
ENDIF
IF INLIST(lnDriveType,1,2,4) AND llIsReadyDrive
? "Serial number: " + ALLTRIM(STR(loDrive.SerialNumber))
ENDIF
IF lnDriveType=3
? "Share name: " + loDrive.ShareName
ELSE
IF lnDriveType=2
? "Share name: " + RTRIM(LEFT(SYS(0),15))
ENDIF
ENDIF
WAIT
CLEAR
NEXT
Работающий код с вызовом WinAPI
FUNCTION GetVolumeSerial(tcDrive)
IF PCOUNT() = 0
tcDrive = "C:\"
ELSE
tcDrive = STRTRAN(tcDrive, ":\", "") + ":\"
ENDIF
LOCAL lcName, lcFSName, lnVolumeSerial, ;
lnFMaxLen, lnFSFlags, ;
lcVolumeSerial, lnNameLen, lnFSNameLen
STORE SPACE(255) TO lcName, lcFSName
STORE 0 TO lnVolumeSerial, lnFMaxLen, lnFSFlags
STORE 255 TO lnNameLen, lnFSNameLen
DECLARE GetVolumeInformation IN win32api STRING, STRING @, ;
INTEGER, INTEGER @, INTEGER @, INTEGER @, STRING @, INTEGER
=GetVolumeInformation(tcDrive, @lcName, lnNameLen, ;
@lnVolumeSerial, @lnFMaxLen, @lnFSFlags, @lcFSName, lnFSNameLen)
CLEAR DLLS GetVolumeInformation
IF EMPTY(lnVolumeSerial)
RETURN ""
ELSE
IF lnVolumeSerial < 0
lnVolumeSerial = 4294967296 + lnVolumeSerial
ENDIF
lcVolumeSerial = SUBSTR(TRANSFORM(lnVolumeSerial,"@0"), 3)
RETURN lcVolumeSerial
ENDIF
ENDFUNC
------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu