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

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

Как отловить собыитие, когда в CD-ROM привод запихали диск.


Sour ©   (2002-09-07 19:14:00) 

Как отловить собыитие, когда в CD-ROM привод запихали диск.
ЗЫ Причем неважно есть ли на нем autorun или нет....


VID   (2002-09-08 20:47:00) [1]

Вот вспомнил:
Ловишь событие WM_DEVICECHANGE
Если WPARAM = 32772 то открыли CD-ROM
Если WPARAM = 32768 то закрыли...


VSergeySPB   (2002-09-08 19:36:00) [2]

Можно попробовать покопать в направлении: - сообщения: MM_MCINOTIFY, WM_DEVICECHANGE. Функции: mciGetYieldProc, mciSetYieldProc.

Возможно это оно.

=Удачи всем" :)


VID   (2002-09-08 19:06:00) [3]

Осуществить мониторинг (folder monitor) драйва. При поступлении событий (надо проверить какие события эффективнее всего использовать), проверить существование диска в драйве DirectoryExists (<cd drive>)


Ученик   (2002-09-08 19:04:00) [4]

Сообщение приходит WM_DEVICECHANGE


Mazenrat   (2002-09-08 18:58:00) [5]

Как отловить данное событие??? Хм. Может, проверка - есть ли диск в СД-приводе - поможет?


uses SysUtils;

//Ищем диск СДюка
function FindCD:Integer;
var
i, DType:integer;
str:string;
begin
Result:=0;
for i:=65 to 90 do begin
str:=chr(i)+":\";
DType:=GetDrivetype(PChar(str));
case DType of
0: drive:=0;
1: drive:=1;
DRIVE_CDROM : drive:=i;
end;
if not ((DType=0) or (Dtype=1)) then
Result:=drive;
end;
end;

//Проверяем есть ли диск в СДюке
function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: word;
begin
if Drive in ["a".."z"] then Dec(Drive, $20);
if not (Drive in ["A".."Z"]) then
raise EConvertError.Create("Not a valid drive ID");
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
if DiskSize (Ord(Drive) - $40) = -1 then Result := False
else Result := True;
finally
SetErrorMode(ErrorMode);
end;
end;

//Применение
if DiskInDrive(chr(findcd)) = true then
messageBox(0,""Диск в СД-приводе","Title",MB_OK);


Sour   (2002-09-08 13:41:00) [6]

Господа, может кто-нибудь нашел или все-таки знает сообщение...


Poirot   (2002-09-08 09:05:00) [7]

Где то тут было сообщение, но блин непомню!!!


Keymaster   (2002-09-07 22:50:00) [8]

Мда...
мне тож интересно стало.......

пойду хелп по апи читать...


Sour   (2002-09-07 21:41:00) [9]

1.Да, а как выполняется автозапуск??
2.Есть такая прога AudioGrabber, она после вставки(смены) диска выводит на эран эго треки. Неужели она на таймере опрашивает CD-ROM?????


Mister X   (2002-09-07 20:05:00) [10]

Нда, даже Windows не знает, как это отловить.


Наверх

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