Определение доступных в системе дисков
FUNCTION logicdr
PARAMETER m_tip
* m_tip - ключ для получения ответа
* 1 - только список дисков
* 2 - список и тип диска
DIMENSION adrivenames[32],adrivetypes[7], aspdrive[32]
adrivenames[1]='A:'
adrivenames[2]='B:'
adrivenames[3]='C:'
adrivenames[4]='D:'
adrivenames[5]='E:'
adrivenames[6]='F:'
adrivenames[7]='G:'
adrivenames[8]='H:'
adrivenames[9]='I:'
adrivenames[10]='J:'
adrivenames[11]='K:'
adrivenames[12]='L:'
adrivenames[13]='M:'
adrivenames[14]='N:'
adrivenames[15]='O:'
adrivenames[16]='P:'
adrivenames[17]='Q:'
adrivenames[18]='R:'
adrivenames[19]='S:'
adrivenames[20]='T:'
adrivenames[21]='U:'
adrivenames[22]='V:'
adrivenames[23]='W:'
adrivenames[24]='X:'
adrivenames[25]='Y:'
adrivenames[26]='Z:'
adrivetypes[1]='Unknown type'
adrivetypes[2]='Basic type'
adrivetypes[3]='floppy'
adrivetypes[4]='hard-DISK'
adrivetypes[5]='net-DISK'
adrivetypes[6]='CD-ROM'
adrivetypes[7]='RAM - DISK'
DECLARE INTEGER GetLogicalDrives IN Win32API
DECLARE INTEGER GetDriveType IN Win32API STRING @
ibitmask=getlogicaldrives()
? 'Имеющиеся в системе дисковые устройства:'
* в массиве aspdrive[jj] получаем список доступных дисков
jj=0
FOR i=0 TO 25
IF BITTEST(ibitmask,i)
IF TYPE(adrivenames[I+1])#"L"
jj=jj+1
DO CASE
CASE m_tip=1
aspdrive[jj] = adrivenames[I+1]
CASE m_tip=2
aspdrive[jj] = adrivenames[I+1]+' - ';
+ adrivetypes[GetDriveType(aDriveNames[I + 1]) + 1]
ENDCASE
ENDIF
* ? adrivenames[I+1]+' - '+adrivetypes[GetDriveType(aDriveNames[I+1])+1]
ENDIF
ENDFOR
CLEAR DLLS
* получаем список подключенных дисков
mspisok=" "
FOR kk=1 TO jj
DO CASE
CASE m_tip=1
mspisok=mspisok+aspdrive[kk]+SPACE(1)
CASE m_tip=2
mspisok=mspisok+aspdrive[kk]+","+SPACE(1)
ENDCASE
ENDFOR
RETURN mspisok
Ей надо передать два параметра буфер под строку и размер этого буфера А вернет она целое число (что значит - не помню)
DWORD GetLogicalDriveString(DWORD nBufferLetgth, LPTSTR lpBuffer)
т.е DECLARE INTEGER GetLogicalDriceString in win32api as DS INTEGER
Size, STRING @ DriveString
DriveString=SPACE(200)
DS(200,DriveString)
Пролучишь в DS строку, где диски разделены нулевым символом и сама строка им заканчивается т.е что-то вроде "A:"+CHR(0)+"C:"+CHR(0)+"D:"+CHR(0)+CHR(0)
Может надо будет вызывать как DS(200,@DriveString) т.е может нужна ссылка на ссылку.
Подробности смотри в Win32 SDK.
Best regards, Alexander
mailto:avm@sci.yakutia.ru