![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать состояние лотка CD-ROM?
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. Не претендую на правильность и крастоу метода, но в принципе он работал. Делалось все примерно так:
fa - Буква диска.
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;
Принцип прцедура пытается выдвинуть лоток, при этом, если лоток не выдвинут, то на выполнение 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: попробуй вручную выдвинуть лоток, а потом задвинуть программно, и наоборот, пока по нажатии на кнопку ничего не произойдет, а при повторном уже будет нужное действие.
В ЕАС есть флаг, который изначально установлен, допустим, на "закрытый лоток", потом при нажатии на кнопку флаг меняется. Если же открыть лоток руками, а потом нажать на кнопку, то флаг, будучи в положении "закрытый лоток", даст команду на открытие, и ничего не произойдет.