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 * Failed - it's probably not a mapped drive, * or nothing is mapped to it RETURN '' ELSE lcunc=LEFT(cBuffer,AT(CHR(0),cBuffer)-1) RETURN lcunc *RETURN LEFT(cBuffer,AT(CHR(0),cBuffer)-1) ENDIF ENDFUNC>Greg,
>> PROCEDURE DriveListing >> * 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 = "" >> >> 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=THIS.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 + chr(13)+chr(10) >> ENDIF >> NEXT >> >> *=MESSAGEBOX(lcDrives, 0 + 64 + 0,'All Drives Listing') >> RETURN lcDrives >> RETURN >> >> ENDPROC >> >>