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