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

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

Как определить что пользователь вставил сьемный диск. [D7, D2005, XP, 2003]


Reals ©   (2007-12-14 16:36:00) 

Здравствуйте!

Возможно ли как-то в своем приложении определить, что пользователь вставил например флешку (появился новый сьемный диск в системе), и обновить ListBox со списками доступных дисков? А когда пользователь вытащил флешку, то опять же запускается процедура перечитки достцпных дисков.

P.S. Процедура генерирующая список доступных дисков имеется, нужно только научится поставить какой-то hook на систему, что появился новый диск.

Заранее премного благодарен!
Спасибо!


Stas   (2007-12-14 17:18:00) [1]

Procedure NewDevice(var Msg:TMessage); message WM_DEVICECHANGE;
procedure TForm1.NewDevice(var Msg:TMessage);
begin
 if (msg.WParam=$8000) or (msg.WParam=$8004)
  then ...
end;


Kolan   (2007-12-14 17:15:00) [2]

> Разобрался, немного переделал и все получилось.

Ну и хорошо. :)


Reals   (2007-12-14 17:13:00) [3]

To: [5] Kolan

Спасибо огромное. Разобрался, немного переделал и все получилось.

Удачи!


Kolan   (2007-12-14 16:57:00) [4]

> а нельзя по таймеру сравнивать предидущее значение доступных
> дисков с новым?

— А эти грибы можно есть?
— Можно.
— …
— Только отравишся.


Kolan   (2007-12-14 16:55:00) [5]

Не флешка, но разобраться можно:

procedure WMDEVICECHANGE(var Msg : TWMDeviceChange); message WM_DEVICECHANGE;

procedure TMainForm.WMDEVICECHANGE(var Msg: TWMDeviceChange);
var
 lpdb  : PDevBroadcastHdr;
 lpdbpr: PDevBroadCastPort;
 S: string;
begin
{Заголовок сообщения}
lpdb := PDevBroadcastHdr(Msg.dwData);
case Msg.Event of
  DBT_DEVICEARRIVAL:
  begin {Добавление}
    if lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
      lpdbpr:= PDevBroadCastPort(Msg.dwData);
      S := StrPas(@lpdbpr.dbcp_name);

      SetComName(S);
    end;
  end;
  DBT_DEVICEREMOVECOMPLETE:
  begin {Удаление}
    if lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
      lpdbpr:= PDevBroadCastPort(Msg.dwData);
      S := StrPas(@lpdbpr.dbcp_name);
      if S = GetComName then
      begin
        SetComName('COM1');
      end;
    end;
  end;
end;
end;


Джо   (2007-12-14 16:52:00) [6]

Сообщение WM_DEVICECHANGE.


Free_Breeze   (2007-12-14 16:51:00) [7]

а нельзя по таймеру сравнивать предидущее значение доступных дисков с новым?


Reals   (2007-12-14 16:46:00) [8]

Так подскажите как "словить" это сообщение?

Спасибо!


www   (2007-12-14 16:43:00) [9]

зачем хук
система рассылает сообщение об изменении аппаратного состава


Наверх

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