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

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

Как узнать выдвинут-ли лоток CD-ROMa или задвинут [D5, D6]


Dankin ©   (2002-12-03 17:56:00) 

Как узнать выдвинут-ли лоток CD-ROMa или задвинут?


Koster   (2002-12-09 07:09:00) [1]

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


Dankin   (2002-12-07 02:19:00) [2]

Dm9 огромный сенкс, ты мне очень помог. Vad-выкрутимся.

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


Игорь Шевченко   (2002-12-05 10:12:00) [3]

Как узнать, есть ли коврик для мыши или нет ?


Vad   (2002-12-05 10:05:00) [4]

К сожалению приведенный код с ReceiveMessage
страдает маленьким, но существенным недостатком.
Он реагирует только на изменение количества
драйвов в системе и работает только при включенном
автораспознавании CD диска.

Пустой лоток можно гонять туда-сюда сколько угодно.

Так, что чуда не произошло.

Этот код точно-также срабатывает при вставлении USB Flash
и других сменных носителей.


Dm9   (2002-12-05 06:25:00) [5]

Сорри, промахнулся, хотел скопировать это: может, поможет.


\Как отловить открытие\закрытие CD-ROM"а?

Использовать сообщение WM_DEVICECHANGE.


TForm1 = class(TForm)
procedure ReceiveMessage (var Msg: TMessage); message WM_DEVICECHANGE;
private
{ Private declarations }
public
{ Public declarations }
end;

...

procedure TForm1.ReceiveMessage(var Msg: TMessage);
begin
if Msg.WParam=32772 then
ShowMessage("CD-ROM Open");

if Msg.WParam=32768 then
ShowMessage("CD-ROM Close");
end;


Dm9   (2002-12-05 06:20:00) [6]

Из справки





\Как програмно открыть\закрыть поддон CD-ROM?
Группа ссылок: MCI

Вариант 1:

Функция OpenCD открывает лоток CDROM. Параметр Drive - буква диска лоток которого необходимо открыть.
Функция CloseCD закрывает лоток CDROM. Параметр Drive - буква диска лоток которого необходимо закрыть.

.....
uses
... MMSystem;

function OpenCD(Drive : Char) : Boolean;
Var
Err : MciError;
OpenParm: TMCI_Open_Parms;

Flags : DWord;
S : String;
DeviceID : Word;
begin
Result:=false;
S:=Drive+":";
Flags:=mci_Open_Type or mci_Open_Element; // См. mci_Open
With OpenParm do
begin
dwCallback := 0;
lpstrDeviceType := "CDAudio";
lpstrElementName := PChar(S);
end;
Err := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Err<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Err:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);

IF Err=0 Then exit;
Result:=True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;


function CloseCD(Drive : Char) : Boolean;
Var
Err : MciError;
OpenParm: TMCI_Open_Parms;
Flags : DWord;
S : String;
DeviceID : Word;
begin
Result:=false;
S:=Drive+":";
Flags:=mci_Open_Type or mci_Open_Element;
With OpenParm do
begin
dwCallback := 0;
lpstrDeviceType := "CDAudio";

lpstrElementName := PChar(S);
end;
Err := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Err<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Err:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
IF Err=0 Then exit;
Result:=True;
finally
mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
end;
end;



Вариант 2:

Данные функции работаю только с первым устройством в системе:
Открыть дверцу:

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

закрыть дверцу:
mciSendString( "Set cdaudio door closed wait", nil, 0, application.handle);


Vad   (2002-12-05 02:55:00) [7]

To:Dankin ©
Пробуешь прочитать CD диск, если не читается,
посылаешь команду задвинуть лоток, снова пробуешь
прочитать CD диск, если не читается, посылаешь
сообщение с просьбой вставить диск и так по кругу... :-)


Dankin   (2002-12-05 01:20:00) [8]

А можно как нибудь узнать удалось задвинуть или нет... То есть
он уже задвинут.
Или там ничего не возвращается?


Vad   (2002-12-04 06:55:00) [9]

А если его там вообще нет?(лоток сломали) :-)

А как определить есть ли на выдвинутом лотке диск
или лоток пустой? :-)
----------------------------------------------------------
Нету датчиков на стандартном CD проверяющих наличие диска
или закрыт лоток или нет. Есть один датчик, но он просто останавливает втягивающий двигатель и запускает процесс
определения диска.

Если ты, к примеру, положишь пустую болванку или диск другой стороной, то для CD это равносильно, тому что диска нет.

Поэтому единственный выход попробовать задвинуть лоток,
даже если он уже задвинут.

... и тогда ты сразу все поймешь... есть диск ... нет диск. :-)


Dankin   (2002-12-04 02:41:00) [10]

Действительно очень смешные шутки. Яж серъезно спрашиваю...
Если просто смотреть есть диск или нет то если его нет
то может лоток и не выдвинут а просто НЕТУ ЕГО ТАМ.
(всмысле диска).


Anatoly Podgoretsky   (2002-12-03 19:43:00) [11]

А это серьезно и есть


greenrul   (2002-12-03 19:23:00) [12]

А если серъезно?


Виктор Щербаков   (2002-12-03 17:59:00) [13]

А как узнать есть лоток или нет? :)))


Игорь Шевченко   (2002-12-03 17:59:00) [14]

Глаза.exe


Наверх

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