Определение доступных в системе дисков

Как в VFP 5-6 определить какие в настоящий момент диски доступны (A:,C:,D:,H:,L: например...) и их свойства (removable)

Определение доступных в системе дисков

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

Автор: Alexander
0

Автор публикации

не в сети 1 год

admin

0
Комментарии: 0Публикации: 109Регистрация: 10-12-2000
Оставить комментарий
Авторизация
*
*
Генерация пароля