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

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

CD-ROM [D3, WinXP]


Skaner ©   (2004-03-14 16:02:00) 

Приветствую вас!
Подскажите пожалуйста каким образом мне отследить попытку открытия сидирома и вывести сообщение!
Зарание благодарен!


Diamond Cat   (2004-03-17 23:59:00) [1]

Когда-то давно эта тема уже обсуждалась, и все пришли к выводу , что отследить открытие лотка сд невозможно если лоток открывается с помощью кнопки, если открывать с помощью команды меню то нет проблем. Поищите в архивах за прошлый год


Gero   (2004-03-17 23:48:00) [2]

> Могу выслать работающий пример с полным исходником

Высылайте, мне будет интересно посмотреть.


Dimaxx   (2004-03-17 23:42:00) [3]

Так и говори "любую попытку, вне зависимости от наличия диска". В MCI вроде есть функция проверки статуса сидюка, но не помню какая.

2 Gero: Надеюсь, из раздела private скопировал объяву? Могу выслать работающий пример с полным исходником.


ssk   (2004-03-17 11:50:00) [4]

>Dimaxx ©  (16.03.04 22:06) [10]
Пустой? А что же ему опознавать


согласен 100%, но все же смотрим вопрос: каким образом мне отследить попытку открытия сидирома

а ведь неизвестно, есть ли диск в приводе или нет...


Gero   (2004-03-16 22:20:00) [5]

> Так что ищи ошибку ...у себя

Интересно, какую я мог допустить ошибку, используя Copy/Paste? ;)
Не знаю, как у Вас, я у меня Ваш код не работает.


Dimaxx   (2004-03-16 22:08:00) [6]

...у себя. :-)


Dimaxx   (2004-03-16 22:06:00) [7]

2 ssk: Пустой? А что же ему опознавать - вот и реакции ноль.

2 Gero: У меня все работает, писал граббер аудиодисков и применил код для обновления окна с содержимым диска. Все работает на "ура". Пример выдрал из работающего проекта. Так что ищи ошибку.


ssk   (2004-03-16 15:47:00) [8]

забыл написать, что при этом пустойлоток задвинул обратно


ssk   (2004-03-16 15:45:00) [9]

>Dimaxx ©  (15.03.04 22:38) [6]

По крайней мере, я попробовал. Как только диск вставили и он опознан - срабатывает DBT_DEVICEARRIVAL. Открываешь лоток - срабатывает DBT_DEVICEREMOVECOMPLETE. Так что подожди с "не то", а попробуй сначала :-)


ага, выдвинул. диск вытащил. и все...  реакции нет. что дальше? ;-)


Gero   (2004-03-15 23:10:00) [10]

> Dimaxx ©   (15.03.04 22:38) [6]

Попробовал. Выдвигаю - задвигаю... Реакции - ноль.


Dimaxx   (2004-03-15 22:38:00) [11]

По крайней мере, я попробовал. Как только диск вставили и он опознан - срабатывает DBT_DEVICEARRIVAL. Открываешь лоток - срабатывает DBT_DEVICEREMOVECOMPLETE. Так что подожди с "не то", а попробуй сначала :-)


Gero   (2004-03-14 23:50:00) [12]

> Dimaxx ©   (14.03.04 23:33) [4]

И это будет работать? Сомневаюсь. Читаем из хелпа про WM_DEVICECHANGE:

The WM_DEVICECHANGE device message notifies an application or device driver of a change to the hardware configuration of a device or the computer

Не то...


Dimaxx   (2004-03-14 23:33:00) [13]

Все можно. Вот пример.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

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

var
Form1: TForm1;

implementation

{$R *.DFM}

const DBT_DEVICEARRIVAL = $8000;
const DBT_DEVICEQUERYREMOVE = $8001;
const DBT_DEVICEQUERYREMOVEFAILED = $8002;
const DBT_DEVICEREMOVEPENDING = $8003;
const DBT_DEVICEREMOVECOMPLETE = $8004;
const DBT_DEVICETYPESPECIFIC = $8005;
const DBT_CONFIGCHANGED = $0018;

procedure TForm1.WMDeviceChange(var Message: TMessage);
var S: string;
begin
{Do Something here}
case Message.wParam of
  DBT_DEVICEARRIVAL    : S:='A device has been inserted and is now available';
  DBT_DEVICEQUERYREMOVE: begin
                           S:='Permission to remove a device is requested';
                           ShowMessage(S);
                           {True grants premission}
                           Message.Result:=integer(True);
                           Exit;
                         end;
  DBT_DEVICEQUERYREMOVEFAILED: S:='Request to remove a device has been canceled';
  DBT_DEVICEREMOVEPENDING    : S:='Device is about to be removed';
  DBT_DEVICEREMOVECOMPLETE   : S:='Device has been removed';
  DBT_DEVICETYPESPECIFIC     : S:='Device-specific event';
  DBT_CONFIGCHANGED          : S:='Current configuration has changed'
  else S:='Unknown Device Message';
end;
ShowMessage(S);
inherited;
end;

end.


DBT_DEVICEREMOVECOMPLETE - это то, что тебе нужно.


Иван Ширко   (2004-03-14 21:02:00) [14]

Если нужно блокировать CD-ROM, то используй ASPI. Если нужно отследить сабытие открытия лотка, то проверяй по таймеру (опять ASPI)


zeqfreed   (2004-03-14 18:57:00) [15]

Помоему можно драйвер написать... только мне помнится, что на delphi драйверы не пишутся..


ssk   (2004-03-14 16:07:00) [16]

никак


Наверх

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