ПОДСКАЖИТЕ Api
Кто знает Api что вытаскивался CD rom и заталкивался
Декларации:
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" _
(ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, _
ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, _
lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_WRITE_THROUGH = &H80000000
Private Const INVALID_HANDLE_VALUE = -1
Private Const IOCTL_DISK_EJECT_MEDIA = 477192
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
А теперь код:
Dim l As Long
Dim ret As Long
Dim sa As SECURITY_ATTRIBUTES
sa.nLength = Len(sa)
sa.lpSecurityDescriptor = 0
sa.bInheritHandle = 1
hDisk = CreateFile("\\.\F:", GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, sa, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0)
If hDisk <> INVALID_HANDLE_VALUE Then
FlushFileBuffers hDisk
ret = DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, Null, 0, Null, 0, l, 0)
CloseHandle hDisk
End If
End Sub
Я думаю, понятно, что вместо F: надо поставить имя своего привода. Подозревая, что следующим твоим вопросом на форуме будет "Как получить список всех CD ROM'ов в системе", скажу сразу: с помощью функции GetLogicalDriveStrings, которая вернёт список всех логических дисков в системе в виде "a:\" + chr(0) + "b:\" + chr(0) + ... + "x:" + chr(0) + chr(0). Передавать в неё нужно строку с указанным размером (String * 255, к примеру) и размер переданной строки (те же 255). А потом с помощью ф-ции GetDriveType выясняй тип девайса (для CD возвращённое значение будет DRIVE_CDROM). Желаю удачи.
Пожалуйста: Можно подробно про каждое API для чего значит? А то я плохо в них разбираюсь почти 0.
CreateFile создаёт объект ядра "файл" операционной системы для чтения/записи в него (GENERIC_) и возвращает его дескриптор (уникальное значение, идентифицирующее созданный объект. Здесь значение дескриптора хранится в переменной hFile). При этом другие приложения также могут считывать и записывать в файл свою информацию (FILE_SHARE_). В данном случае созданный нами объект ассоциируется с заголовком тома F:\ (понятие "файл" в винде очень гибкое и позволяет рассматривать в этом свете файлы, папки, коммуникационные порты, консольные окна и т. д.). Иными словами, теперь мы можем писать/читать не файлы тома F:\, а непосредственно содержимое тома в соответствии с правилами файловой системы (по этому принципу, например, открывается том для дефрагментации). Если быть точнее, то мы не пишем прямо в заголовок тома, а получаем возможность обмениваться данными с устройством напрямую, минуя промежуточные интерфейсы операционной системы, предписывающими нас работать с файлами и папками, и не более того. Так вот обмениваться данными с устройством напрямую позволяет функция DeviceIOControl. Но отправлять мы можем не все подряд данные, а строго ограниченный системой список требуемых операций (около 150 комманд). В данном случае, нам требуется лишь извлечение лотка CD-ROM'а, поэтому передаём IOCTL_DISK_EJECT_MEDIA. Остальные параметры нами не используются, они связаны с буфферами, содержащими информацию к передаваемой комманде. В нашем случае такой информации нет. FlushFileBuffers сбрасывает буферы данных устройства, или, грубо говоря, сохраняет несохранённое и читает недочитанное. После того, как мы выполнили все необходимые операции над файлом, его необходимо закрыть - для этого вызываем CloseHandle, и, тем самым, позволяем ОС пользоваться им в своих нуждах. Ну, помоему, всё... А с GetLogicalDriveStrings и GetDriveType ты, я думаю, и сам разберёшься....
HarryAxe здесь только API чтобы Cd-rom вытаскивался.
А тебе что надо?
А чтоб заталкивался
Dim BytesReturned As Long
DeviceIoControl(hDisk, IOCTL_STORAGE_LOAD_MEDIA, Null, 0, Null, 0, BytesReturned, 0)