Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

CD-ROM   Найти похожие ветки 

 
Skaner ©   (2004-03-14 16:02) [0]

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


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

никак


 
zeqfreed ©   (2004-03-14 18:57) [2]

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


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

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


 
Dimaxx ©   (2004-03-14 23:33) [4]

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

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 - это то, что тебе нужно.


 
Gero ©   (2004-03-14 23:50) [5]

> 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-15 22:38) [6]

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


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

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

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


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

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

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


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


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

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


 
Dimaxx ©   (2004-03-16 22:06) [10]

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

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


 
Dimaxx ©   (2004-03-16 22:08) [11]

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


 
Gero ©   (2004-03-16 22:20) [12]

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

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


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

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


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

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


 
Dimaxx ©   (2004-03-17 23:42) [14]

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

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


 
Gero ©   (2004-03-17 23:48) [15]

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

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


 
Diamond Cat ©   (2004-03-17 23:59) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.097 c
3-1079008733
Andrew
2004-03-11 15:38
2004.04.11
Неправильная работа TDBLookupComboBox


1-1082390271
Torin
2004-04-19 19:57
2004.04.11
Free


1-1082378784
Term
2004-04-19 16:46
2004.04.11
MDI-формы вопрос такой........


1-1082566479
Shag
2004-04-21 20:54
2004.04.11
Опять Excel


14-1079109049
Soft
2004-03-12 19:30
2004.04.11
Тотальное средство борьбы со СПАМОМ!!!