>* Constants for drive types. >#DEFINE DRIVE_UNKNOWN 0 >#DEFINE DRIVE_NO_ROOT_DIR 1 >#DEFINE DRIVE_REMOVABLE 2 >#DEFINE DRIVE_FIXED 3 >#DEFINE DRIVE_REMOTE 4 >#DEFINE DRIVE_CDROM 5 >#DEFINE DRIVE_RAMDISK 6 >#DEFINE CR CHR(13) > >DECLARE INTEGER GetLogicalDrives IN Win32API >DECLARE INTEGER GetDriveType IN Win32API STRING RootPath > >PRIVATE lcDrivestring, lcDriveRoot, liDrivelist, lcDrives, i >lcDrives = "" > >* GetLogicalDrives returns a 32-bit value containing a list of >* available drives. If the specific bit is ON, the drive letter >* corresponding to that position exists. >liDrivelist = GetLogicalDrives() > >* Check each of the bits >FOR i = 0 TO 31 > IF BITTEST(liDrivelist, i) >* If the 0th bit is ON, that means drive 'A:', >* the 2nd bit is 'C:", etc. > lcDriveRoot = CHR(65 + i) + ":\" >* Perform a GetDriveType to determine if it is a floppy, CD, etc. > lcDrivetype = GetDriveType(lcDriveRoot) > DO CASE > CASE lcDrivetype = DRIVE_UNKNOWN > lcDrivestring = "Cannot be determined" > CASE lcDrivetype = DRIVE_NO_ROOT_DIR > lcDrivestring = "Root directory does not exist" > CASE lcDrivetype = DRIVE_REMOVABLE > lcDrivestring = "Floppy/removable drive" > CASE lcDrivetype = DRIVE_FIXED > lcDrivestring = "Hard drive/nonremovable drive" > CASE lcDrivetype = DRIVE_REMOTE > lcDrivestring = "Remote/Network drive" > lcunc=GetUNCForDriveLetter(LEFT(lcDriveRoot,2)) > IF TYPE('lcunc')="C" .AND. !EMPTY(lcunc) > lcDrivestring = lcunc > ENDIF > CASE lcDrivetype = DRIVE_CDROM > lcDrivestring = "CD-ROM drive" > CASE lcDrivetype = DRIVE_RAMDISK > lcDrivestring = "RAM disk" > ENDCASE > lcDrives = lcDrives + lcDriveRoot + " " + lcDrivestring + CR > ENDIF >NEXT > >=MESSAGEBOX(lcDrives, ; > 0 + 64 + 0,'All Drives Listing') >RETURN > > >FUNCTION GetUNCForDriveLetter >LPARAMETER cDriveLetterToCheck >LOCAL cBuffer, nResult, lcunc >IF TYPE('cDriveLetterToCheck') # 'C' OR ; > LEN(cDriveLetterToCheck) < 2 OR ; > SUBSTR(cDriveLetterToCheck,2,1) # ':' OR ; > ! BETWEEN(UPPER(LEFT(cDriveLetterToCheck,1)),'A','Z') > RETURN '' >ENDIF >DECLARE INTEGER WNetGetConnection IN Win32API ; > STRING @cLocalDrive, ; > STRING @cRemoteUNCBuffer, ; > INTEGER @nSizeOfBuffer >cBuffer = SPACE(511) >nResult = WNetGetConnection(LEFT(cDriveLetterToCheck,2), ; > @cBuffer, ; > 511) >IF nResult # 0 > RETURN '' >ELSE > lcunc=LEFT(cBuffer,AT(CHR(0),cBuffer)-1) > RETURN lcunc >*RETURN LEFT(cBuffer,AT(CHR(0),cBuffer)-1) >ENDIF >>