![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать выдвинут-ли лоток 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