Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Как проверит, открыт ли лоток CD-ROM?   Найти похожие ветки 

 
Nik_vr ©   (2005-05-18 23:08) [0]

Собственно сабж...


 
Ученик   (2005-05-18 23:25) [1]

>Nik_vr ©   (18.05.05 23:08)  

 MediaPlayer1.DeviceType := dtCDAudio;
 MediaPlayer1.FileName := "?:";
 MediaPlayer1.Open;
 ShowMessage(IntToStr(Ord(MediaPlayer1.Mode)))


 
Nik_vr ©   (2005-05-19 20:12) [2]

Во-первых, этот код в любом случае выдает цифру "6".
Во-вторых, мне нужно это сделать на WinAPI, а то с медиа-плэером больно размер вырастет...


 
kat ©   (2005-05-19 20:37) [3]

из Кулибы:

Для открытия CD-ROM:

   mciSendString("Set cdaudio door open wait", nil, 0, handle);  

Для закрытия CD-ROM:

   mciSendString("Set cdaudio door closed wait", nil, 0, handle);  

Nomadic добавляет свой способ открытия CD-ROM:

   mciSendCommand(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);  

Не забудьте включить MMSystem в список используемых модулей (uses).


 
OSokin ©   (2005-05-19 21:30) [4]

Это уже вечный вопрос - проверить, открыт или закрыт привод... На него нет ответа - можно проверить только, есть диск или нет. Для этого нужно использовать функцию "GetDiskFreeSpace(pchar(disk+":\"),a,a,a,a);", где "disk" - это название диска, а "a" - переменная типа cardinal. Если функция возвращает false, то диска в приводе нет.


 
Nik_vr ©   (2005-05-20 12:14) [5]

2kat
Спасибо, но это я знал...

2OSokin
Интересно, а как тогда некоторые программы (типа aTools)
открывают/закрывают лоток по нажатию одной и той же кнопки???
(точно знаю, что aTools написаны на Delphi).


 
Nik_vr ©   (2005-05-20 12:14) [6]

2kat
Спасибо, но это я знал...

2OSokin
Интересно, а как тогда некоторые программы (типа aTools)
открывают/закрывают лоток по нажатию одной и той же кнопки???
(точно знаю, что aTools написаны на Delphi).


 
Alexander Panov ©   (2005-05-20 12:25) [7]

Интересно, а как тогда некоторые программы (типа aTools)
открывают/закрывают лоток по нажатию одной и той же кнопки???


А для этого обязательно знать состояние лотка?


 
Чапаев ©   (2005-05-20 12:33) [8]

> mciSendString("Set cdaudio door closed wait", nil, 0, handle);  
Логично, что есть и аналогичные команды get. Справочник по MCI тебе в руки.


 
Marser ©   (2005-05-20 16:39) [9]


> Чапаев ©   (20.05.05 12:33) [8] [Новое
>сообщение][Ответить]
> > mciSendString("Set cdaudio door closed wait", nil,
>0, handle);  
> Логично, что есть и аналогичные команды get.
> Справочник по MCI тебе в руки.

Нет таких. Есть status


 
DVM ©   (2005-05-20 17:01) [10]

ЭТО НЕВОЗМОЖНО, СТО РАЗ ГОВОРЕНО!


 
Nik_vr ©   (2005-05-20 22:23) [11]

Ну невозможно, так невозможно... А как тогда открыть/закрыть лоток одной кнопкой (если открыт-закрыть и наоборот)? Ведь делают же люди!


 
Eraser ©   (2005-05-20 23:11) [12]

Nik_vr ©   (20.05.05 22:23) [11]

С пом. операторов условия.


 
Anatoly Podgoretsky ©   (2005-05-20 23:14) [13]

Синхронизация.


 
Nik_vr ©   (2005-05-21 13:41) [14]

2Eraser & Anatoly Podgoretsky

А подробнее можно?


 
Eraser ©   (2005-05-21 13:46) [15]

Удалено модератором


 
Eraser ©   (2005-05-21 13:46) [16]

Удалено модератором


 
Anatoly Podgoretsky ©   (2005-05-21 13:48) [17]

Nik_vr ©   (21.05.05 13:41) [14]
Просто!
Закрой один раз и State := Closed


 
Nik_vr ©   (2005-05-21 19:45) [18]

Это все я так сделал. Проблема вот в чем: если мою программу запустили в том момент когда лоток открыть, то я не могу закрыть его нормально...

2Eraser
Пошутить я и сам люблю...


 
Anatoly Podgoretsky ©   (2005-05-21 20:20) [19]

Nik_vr ©   (21.05.05 19:45) [18]
Ошибка в программе


 
OSokin ©   (2005-06-21 17:38) [20]

Люди, а ведь это возможно! Смотрите RapidCache у VirtualDrive!


 
Digitman ©   (2005-06-21 17:45) [21]

поелозить лотком у юзера в самый неожиданный для него момент - это верх остроумия


 
Nik_vr ©   (2005-06-21 18:59) [22]

2OSokin:
Мне тожу думается, что возможно...

2Digitman
Да мне просто лень тянуться под стол :)


 
Nik_vr ©   (2005-06-21 18:59) [23]

Удалено модератором


 
MS-MEN ©   (2005-06-21 23:54) [24]

Можно.

1) Выбрать диск обратится к портам 0/I и получить все что хотел.
2) Прочитать CD с помощью CreateFile и проверить что есть сигнал
3) Открыть а затем прочитать диск если ошибка другая то все ok.

Но самый лучши вариянт это первый.


 
DVM ©   (2005-06-22 10:44) [25]

Никак не проверить, сколько раз говорено! Можно только попытаться при старте сразу его закрыть и считать потом закрытым. Далее отслеживать движения лотка.


 
Anatoly Podgoretsky ©   (2005-06-22 11:02) [26]

DVM ©   (22.06.05 10:44) [25]
Не выйдет, как ты будешь отслеживать движение лотка, иначе бы и проблемы не было.


 
DVM ©   (2005-06-22 11:53) [27]


> как ты будешь отслеживать движение лотка, иначе бы и проблемы
> не было.

Там какое-то сообщение можно получать.


 
КодеКорешь   (2005-08-08 18:45) [28]

Есть такая функция GetNtmsObjectInformation далее смотреть следующие структуры NTMS_OBJECTINFORMATION NTMS_IEDOORINFORMATION


typedef struct _NTMS_IEDOORINFORMATION {  
WORD Number;  
WORD State;  
WORD MaxOpenSecs;  
NTMS_GUID Library;
} NTMS_IEDOORINFORMATION;

State - State of the door. This can be one of the following values.

Это все это к сожалению в делфи не портировано, так что ручками...


 
n0name   (2005-08-08 21:08) [29]

Могу добавить что это происходить через интерфейс RSM. Для вызова вышеуказанной функции надо получить GUID этого устройства. Его, как я полагаю можно узнать вызвав IOCTL_DISK_GET_DRIVE_LAYOUT_EX.



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.043 c
2-1124489474
naraki
2005-08-20 02:11
2005.10.02
поиск в блакноте


2-1124845311
Xrusha
2005-08-24 05:01
2005.10.02
Количество пунктов подменю в зависимости от количества CD-ROM ов


9-1117434998
Egor
2005-05-30 10:36
2005.10.02
криптозащита


1-1126526379
Lamka
2005-09-12 15:59
2005.10.02
Присвоение объектов


14-1126270185
Mike Kouzmine
2005-09-09 16:49
2005.10.02
У меня эта ветка появилась на 1 стр. У вас тоже?