Ответы на все вопросы

FAQ / Программирование / Visual Basic

Как открыть засосавшийся лоток привода?

Вопрос:

Иногда, Windows XP, после записи компакт диска в Проводнике, лоток привода засасывает. Раньше приходилось перегружать систему, но потом обнаружил что если засосало, то для выбрасывания привода можно воспользоваться NERO. Решил написать для себя маленькую прогу, которая, естественно, использует функцию API mciSendString и поместить ее в панель быстрого запуска.

Сказано: сделано! Но вот после очередного засасывания, моя прога не помогла, пришлось опять воспользоваться NERO

Вот и вопрос, какими средствами это делает NERO? Ясно что не mciSendString.

Ответ:

Public Declare Function DeviceIoControl Lib "kernel32" Alias
"DeviceIoControl" (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, lpOverlapped As
OVERLAPPED) As Long


hDevice можно получить из CreateFile с параметром вроде "\\.\E:" (если у вас CD-Rom - E: и т.д.).

Ещё нужна константа
Const IOCTL_STORAGE_MEDIA_REMOVAL = &H2D4804
и тип
Type PREVENT_MEDIA_REMOVAL
     PreventRemoval As Boolean
End Type

Dim Prevent As PREVENT_MEDIA_REMOVAL
Dim BytesReturned As Long

'Затем вы устанавливаете Prevent.PreventRemoval в True - разрешить
'извлечение.

'И вызываете собственно функцию:

DeviceIoControl hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, Prevent,
Len(Prevent), ByVal 0&, 0, BytesReturned, ByVal 0&


Кстати, под 98-ми etc., может быть код
Const IOCTL_MEDIA_REMOVAL = &H74804
Но тут точно не знаю.

И eject'ить тоже можно через DeviceIOControl.

    Andrey Shchekin

Версия для печати Найти похожие статьи
Поиск по сайту

Архив

ВсПнВтСрЧтПтСб
1234567
891011121314
15161718192021
22232425262728
293012345
6789101112
13141516171819
20212223242526
272829303112



Мы рекомендуем