#COMPILE EXE ' Contributor Patrice terrier ' This function works either with 95 OSR1 ' using GetDiskFreeSpace ' or 95 OSR2, 98 or NT 4.0 and NT 5.0 ' using GetDiskFreeSpaceEx #INCLUDE "win32api.inc" DECLARE FUNCTION dvDiskFree&&(BYVAL DSK$,tp$) FUNCTION PBMAIN() AS LONG DIM freesp AS cur 'Currencey DIM totlsp AS cur 'Currency 'DWORD dv$="C" freesp=dvDiskFree&&("C","F") totlsp=dvDiskFree&&("C","T") ' Result% = MSGBOX("Free Space", [style%], "Free SPace" msg$="Free Space on "+dv$+" "+FORMAT$(freesp,"##,###,###,###")+" bytes" IF VAL(FORMAT$(totlsp,"###########"))<>0 THEN msg$=msg$+CHR$(13)+CHR$(10)+"Out of "+FORMAT$(totlsp,"##,###,###,###")+" bytes" END IF MSGBOX msg$,,"Drive Space" END FUNCTION FUNCTION dvDiskFree&&(BYVAL DSK$,typ$) EXPORT DIM pGetDiskFreeSpaceEx AS DWORD PTR ' Returns the number of free bytes on selected drive LOCAL d AS ASCIIZ * 4 LOCAL sc AS DWORD LOCAL bs AS DWORD LOCAL fc AS DWORD LOCAL tc AS DWORD Drive% = ASC(UCASE$(Dsk$)) IF Drive% < 65 OR Drive% > 90 THEN Drive% = 0 IF Drive% THEN d = CHR$(Drive%) + ":\" ELSE d = CURDIR$ END IF Done% = 0 hLib& = LoadLibrary("KERNEL32.DLL") IF hLib& THEN pGetDiskFreeSpaceEx = GetProcAddress(hLib&, "GetDiskFreeSpaceExA") IF pGetDiskFreeSpaceEx THEN CALL DWORD pGetDiskFreeSpaceEx CDECL (d, lpFreeBytesAvailableToCaller&&, _ lpTotalNumberOfBytes&&, lpTotalNumberOfFreeBytes&&) IF typ$="F" THEN FUNCTION = lpFreeBytesAvailableToCaller&& ELSE FUNCTION = lpTotalNumberOfBytes&& END IF Done% = -1 END IF CALL FreeLibrary(hLib&) END IF IF NOT Done% THEN IF ISTRUE(GetDiskFreeSpace(d, sc, bs, fc, tc)) THEN IF typ$="F" THEN FUNCTION = CQUD(sc * bs * fc) END IF END IF END IF END FUNCTION