Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать состояние лотка CD-ROM?


Страницы:   1 2 3

BPK ©   (2003-02-17 23:00:00) 

Открыть и закрыть дверцу CD-ROM это хорошо. Таких советов навалом в Сети (причём подавляющее большинство - с использованием MCI, а не WinAPI).
Только вот никто не может сказать, как узнать, открыта ли в данный момент эта дверца.


Lancelot   (2003-03-15 01:41:00) [1]


> BPK (14.03.03 12:48)
> А вот что ответил автор EAC:

Похоже, это тоже самое, что делает AlexandrRya.


BPK   (2003-03-15 01:33:00) [2]

P.S.
Один из признаков убогости форума - то, что модераторы позволяют обращаться участникам друг к другу на "ты" (теперь я вижу, что они и сами этим грешат), допускают фамильярность и выяснение отношений.


BPK   (2003-03-15 01:30:00) [3]

Если модераторы пропускают такую херотень, то судьбу форума я могу предсказать заранее. Я прошу не персональной поддержки, а просто не пропускать убогие по своему значению сообщения. Это касается ВСЕГО форума.
На моей памяти был один нормальный форум - "взаимопомощь" на Infoart (пока его не прикрыли). Там модераторы активно участвовали в процессе добавления вопросов и ответов и не стонали. В результате всегда можно было найти нужную информацию и было взаимопонимание.
Модераторы так же могли рассчитывать на помощь участников форума (хотя, это зависит от людей). А здесь приходится рыться в куче мусора, написанного кем-то, кому просто скучно одному дома.

Если, вдобавок ко всему, модераторы играют роль недоступного "его величества", до которого народу не достучаться, то я не могу понять, зачем вообще делали форум. Достучаться по E-mail я уже неоднократно пробовал. Безрезультатно. Не получил даже отказа.


app   (2003-03-14 12:55:00) [4]

BPK (14.03.03 03:21)
Ты перепутал персональную поддержку, с открытым форумом.
Второе к модераторам положено обращаться только по почте, обращение ф форумах не допустима, граничат с нарушением нетикета.


BPK   (2003-03-14 12:48:00) [5]

А вот что ответил автор EAC:

> AW> No, there is no such a flag for CD-ROM drives...
> AW> EAC uses a "guess" (test) whether the tray is open or not...
> I can say, that it is quite reliable test. Could you share the
> decision with me?
> Remark:
> I know that in MS-DOS there is such a flag. You must query CD-ROM
> driver through MSCDEX to get drive state word. Lower order bit of this
> word indicates the tray state.
> So I don"t know whether there is an hardware signal which could be get
> from drive or this is just an internal flag of CD-ROM driver, which
> also "guesses".

The guess is quite easy... The tray is a mechanical thing...
(By the way, this only works for open/close the tray - if it
is open, close it, if it is closed, open it...)

Send command for closing tray. If it immedately finishes,
assume that the tray was closed (and vice versa)

cu, Andre


BPK   (2003-03-14 03:21:00) [6]

>JibSkeart © (08.03.03 16:24)

>Если ты в своей проге нажал кнопку чтобы лоток открылся неужели >нелзя узнать открыта она или нет ??
>или ты вообшем ?

Но она-то не одна висит в памяти. А вдруг кто-нибудь ещё откроет или закроет лоток? Например, это может сделать пользователь с помощью кнопки на самом приводе.

>AlexandrRya (09.03.03 00:11)

Большое спасибо. Единственный дельный ответ.

Огромная просьба модератору: удалить все хохмы (и впредь не допускать такого), ибо они здесь не к месту.


Mad_Max   (2003-03-12 07:29:00) [7]

А у меня был сидюк... не помню какой фирмы... Он сам задвигал лоток через какое-то время, если его не закрыть вручную.


JibSkeart   (2003-03-11 09:31:00) [8]

Anatoly Podgoretsky ©
Вполне Возможно :)


Tano   (2003-03-09 18:38:00) [9]

Просто дополнительная информация:
Насчет "при загрузке винды лоток задвигается" - это происходит при перезагрузке аппаратуры. Все устройства получают аппаратный сигнал, по которому каждый переходит в начальное состояние (или то, которое на него похоже).
Самое интересное то, что мой Mitsumi 16/8/40 не задвигает каретку сам ни при включении ни при перезагрузке (такое встретил впервые, хотя сидюков видел много).


Anatoly Podgoretsky   (2003-03-09 09:57:00) [10]

JibSkeart © (08.03.03 16:24)
Очень просто, для выполнения этой операции не требуется знать состояния лотка, достаточно дать команду закрыть


Anatoly Podgoretsky   (2003-03-09 09:56:00) [11]

AlexandrRya (09.03.03 00:11)
Это уже не определение состояния лотка, а имитация с выдвижением и обратным втыканием, аналогично отслеживанию попытке чтения диска в дисководе.
Просто нет сигнала о состоянии лотка, как в прочем и лотка может не быть, по крайней мере есть три типа CDROM - c kjnrhjv (самый распространенный), со щелью и с картриджем.


Rog   (2003-03-09 06:23:00) [12]

Удалено модератором
Примечание: Задай СВОЙ вопрос в отдельной своей ветке


AlexandrRya   (2003-03-09 00:11:00) [13]

Когда-то я давал ответ и пример в этом форуме, о том, как сделать, то что делает EAC. Не претендую на правильность и крастоу метода, но в принципе он работал. Делалось все примерно так:

procedure TOCCD.Execute;
const
AliasName = "MyCoolCD";
var s : string;
T:Cardinal;

begin
s := "open " +fa+ ": type cdaudio alias " + AliasName + paramstr(1) + " shareable wait";
mciSendString(PChar(s), nil, 0, 0);
T:=GetTickCount;
s := "set " + AliasName + fa + " door open wait";
if (mciSendString(PChar(s), nil, 0, 0)<>0) or
((GetTickCount-T)<100) then
begin
s := "set " + AliasName + fa + " door closed wait";
mciSendString(PChar(s), nil, 0, 0);
end;
end;
fa - Буква диска.
Принцип прцедура пытается выдвинуть лоток, при этом, если лоток не выдвинут, то на выполнение mciSendString(PChar(s), nil, 0, 0) уйдет время (не забывайте про параметр wait в команде - инче ничего работать не будет), которое больше 100 мс (наверное :)), если же лоток уже выдвинут, то функция почти моментально вернет управление. Именн это и проверяется, и если время меньше 100 мс, то мы задвигаем лоток.
Я долго искал другой метод, но ничего лучше не нашел. Теперь эта прга висит у меня в контекстном меню Explorer"a к сидюку с названием Извлечь/вставить.


JibSkeart   (2003-03-08 16:24:00) [14]

Если ты в своей проге нажал кнопку чтобы лоток открылся неужели нелзя узнать открыта она или нет ??
или ты вообшем ?

но у меня такое чувство что как то можно(у меня,да и не только, когда лоток выдвинут при завшении виндов или при перезагрузки задвигается обратно)


BPK   (2003-03-07 14:41:00) [15]

Автор EAC написал, что такого флага нет, и что он использует какой-то "тест" для определения состояния лотка. Интересно, что это за тест. Уж очень надёжный. Жду его ответа.


AGGRESSOR   (2003-03-03 15:09:00) [16]

to BPK (02.03.03 14:16)
Сдаюсь. И у меня просьба: если все-таки найдешь решение, дай знать сюда, всем будет интересно (и обломно тоже).


BPK   (2003-03-02 14:16:00) [17]

>AGGRESSOR
>Вот решение EAC"a: попробуй вручную выдвинуть лоток, а потом
>задвинуть программно, и наоборот, пока по нажатии на кнопку
>ничего не произойдет, а при повторном уже будет нужное действие.

Ничего подобного. EAC отрабатывает ситуацию сразу, т.е. это не какой-то внутренний флаг EAC.

>Лёшик
>Если под досовским очком можешь определить задвинут ли привод
>или нет то почему бы те не запустить это очко через CreateProcess
>а потом просто не обработать эту инфу ...

Нет, потому, что такой номер не пройдёт. Windows NT/2000/XP не даст DOS-программе копаться в портах компьютера.
Напоминаю, что мне нужно решение для Win32.


Лёшик   (2003-02-28 11:33:00) [18]

Если под досовским очком можешь определить задвинут ли привод или нет то почему бы те не запустить это очко через CreateProcessа потом просто не обработать эту инфу ...


GiGi   (2003-02-26 23:39:00) [19]

Серьезно... сли мне память не изменяет (с процессором) - то даже Винда сама такое сделать не может...А куда уж тогда всяким прогам, работающим под нее...


AGGRESSOR   (2003-02-26 16:06:00) [20]


> BPK

Вот решение EAC"a: попробуй вручную выдвинуть лоток, а потом задвинуть программно, и наоборот, пока по нажатии на кнопку ничего не произойдет, а при повторном уже будет нужное действие.
В ЕАС есть флаг, который изначально установлен, допустим, на "закрытый лоток", потом при нажатии на кнопку флаг меняется. Если же открыть лоток руками, а потом нажать на кнопку, то флаг, будучи в положении "закрытый лоток", даст команду на открытие, и ничего не произойдет.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо