Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 18:54   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Отловить событие при открытии/закрытии дисковода

Мне надо отловить событие дисковода. Пробовал такой код:
Код:
private
  { Private declarations }
  procedure ReceiveMessage(var Msg: TMessage); message WM_DEVICECHANGE;

procedure TMainForm.ReceiveMessage(var Msg: TMessage);
const
 DBT_DEVICEARRIVAL = $8000; //insert
 DBT_DEVICEREMOVECOMPLETE = $8004;  //eject
begin
  inherited;
  case Msg.wParam of
    DBT_DEVICEARRIVAL: //что-то делаем
    DBT_DEVICEREMOVECOMPLETE: //что-то делаем
  end;
end;
Но ничего не происходит, это событие даже не вызывается!
Что делать?
k1r1ch вне форума Ответить с цитированием
Старый 05.10.2009, 19:02   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Проверить, открыт ли CD-ROM
--------------------------------------------

Цитата:
Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch
Код:
uses
   mmsystem;

   procedure TForm1.Button1Click(Sender: TObject);
 var
   s: array[0..64] of Char;
   error: Cardinal;
   Text: array[0..255] of Char;
 begin
   error := mciSendstring('open cdaudio alias geraet', nil, 0, Handle);
   if error <> 0 then
   begin
     mciGetErrorstring(error, @Text, 255);
     ShowMessage(Text);
     mciSendstring('close geraet', nil, 0, Handle);
     Exit;
   end;

   error := mciSendstring('status geraet mode', @s, SizeOf(s), Handle);
   if error <> 0 then
   begin
     mciGetErrorstring(error, @Text, 255);
     ShowMessage(Text);
     mciSendstring('close geraet', nil, 0, Handle);
     Exit;
   end;

   mciSendstring('close geraet', nil, 0, Handle);
   ShowMessage('Message: ' + s);
 end;
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 05.10.2009, 19:06   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Получается, что мне надо запихать это в таймер. Но это ведь как-то неправильно! Может есть какое-нибудь событие?

P.S.: Тем более что оно еще неправильно работает!

Последний раз редактировалось k1r1ch; 05.10.2009 в 19:39.
k1r1ch вне форума Ответить с цитированием
Старый 06.10.2009, 12:58   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

WM_DEVICECHANGE работает, если в приводе есть диск
Вот тут http://khv-inviz.livejournal.com/28024.html через DeviceIOControl, но там вроде не без ошибок
пыщь

Последний раз редактировалось JTG; 06.10.2009 в 13:01.
JTG вне форума Ответить с цитированием
Старый 06.10.2009, 13:52   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Печаль

Жалко, что на C, а не на Delphi! Видимо дисковод вообще не вызывает никаких событий в винде при закрытии-открытии, тогда наверное откажусь от этой идеи...
k1r1ch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить событие нажатия клавиши Esc? dsapa Microsoft Office Excel 14 03.12.2016 14:27
Проблема при открытии базы при помощи ADO SlavaSH БД в Delphi 21 30.06.2009 16:51
Автозапуск макроса при открытии и закрытии книги ruavia3 Microsoft Office Excel 8 06.04.2009 11:09
TRichViewEdit - как отловить событие "курсор над таблицей" chandrasecar Компоненты Delphi 0 05.04.2009 20:04
как сделать заставку при закрытии программы(событие TForm1.FormClose)? beegl Общие вопросы Delphi 9 03.04.2009 09:00