Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ПОДСКАЖИТЕ Api

280
21 февраля 2006 года
ВуД™
326 / / 04.01.2006
Кто знает Api что вытаскивался CD rom и заталкивался
534
21 февраля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by ВуД
Кто знает Api что вытаскивался CD rom и заталкивался



Декларации:

Код:
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
    (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 hDisk As Long
    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). Желаю удачи.
280
22 февраля 2006 года
ВуД™
326 / / 04.01.2006
Пожалуйста: Можно подробно про каждое API для чего значит? А то я плохо в них разбираюсь почти 0.
534
22 февраля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by ВуД
Пожалуйста: Можно подробно про каждое API для чего значит? А то я плохо в них разбираюсь почти 0.


CreateFile создаёт объект ядра "файл" операционной системы для чтения/записи в него (GENERIC_) и возвращает его дескриптор (уникальное значение, идентифицирующее созданный объект. Здесь значение дескриптора хранится в переменной hFile). При этом другие приложения также могут считывать и записывать в файл свою информацию (FILE_SHARE_). В данном случае созданный нами объект ассоциируется с заголовком тома F:\ (понятие "файл" в винде очень гибкое и позволяет рассматривать в этом свете файлы, папки, коммуникационные порты, консольные окна и т. д.). Иными словами, теперь мы можем писать/читать не файлы тома F:\, а непосредственно содержимое тома в соответствии с правилами файловой системы (по этому принципу, например, открывается том для дефрагментации). Если быть точнее, то мы не пишем прямо в заголовок тома, а получаем возможность обмениваться данными с устройством напрямую, минуя промежуточные интерфейсы операционной системы, предписывающими нас работать с файлами и папками, и не более того. Так вот обмениваться данными с устройством напрямую позволяет функция DeviceIOControl. Но отправлять мы можем не все подряд данные, а строго ограниченный системой список требуемых операций (около 150 комманд). В данном случае, нам требуется лишь извлечение лотка CD-ROM'а, поэтому передаём IOCTL_DISK_EJECT_MEDIA. Остальные параметры нами не используются, они связаны с буфферами, содержащими информацию к передаваемой комманде. В нашем случае такой информации нет. FlushFileBuffers сбрасывает буферы данных устройства, или, грубо говоря, сохраняет несохранённое и читает недочитанное. После того, как мы выполнили все необходимые операции над файлом, его необходимо закрыть - для этого вызываем CloseHandle, и, тем самым, позволяем ОС пользоваться им в своих нуждах. Ну, помоему, всё... А с GetLogicalDriveStrings и GetDriveType ты, я думаю, и сам разберёшься....

280
22 февраля 2006 года
ВуД™
326 / / 04.01.2006
HarryAxe здесь только API чтобы Cd-rom вытаскивался.
534
23 февраля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by ВуД
HarryAxe здесь только API чтобы Cd-rom вытаскивался.


А тебе что надо?

280
23 февраля 2006 года
ВуД™
326 / / 04.01.2006
А чтоб заталкивался
534
24 февраля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by ВуД
А чтоб заталкивался


 
Код:
Private Const IOCTL_STORAGE_LOAD_MEDIA = 2967564

Dim BytesReturned As Long
DeviceIoControl(hDisk, IOCTL_STORAGE_LOAD_MEDIA, Null, 0, Null, 0, BytesReturned, 0)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог