Вниз
Скачать: CL | DM;

Как определить что пользователь вставил сьемный диск.   Найти похожие ветки 

← →
Reals   (2007-12-14 16:36) [0]

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

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

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

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


← →
www   (2007-12-14 16:43) [1]

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


← →
Reals   (2007-12-14 16:46) [2]

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

Спасибо!


← →
Free_Breeze   (2007-12-14 16:51) [3]

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


← →
Джо ©   (2007-12-14 16:52) [4]

Сообщение WM_DEVICECHANGE.


← →
Kolan ©   (2007-12-14 16:55) [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;


← →
Kolan ©   (2007-12-14 16:57) [6]

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

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


← →
Reals   (2007-12-14 17:13) [7]

To: [5] Kolan

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

Удачи!


← →
Kolan ©   (2007-12-14 17:15) [8]

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

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


← →
Stas ©   (2007-12-14 17:18) [9]

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;



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
15-1196971356
shaman
2007-12-06 23:02
2008.01.13
тормоза под Win2003


3-1189165817
keymaster
2007-09-07 15:50
2008.01.13
Как получить из oracle refcursor (ADO)


15-1197267417
Slider007
2007-12-10 09:16
2008.01.13
С днем рождения ! 10 декабря 2007 понедельник (день тяжелый)


2-1197372591
kyn66
2007-12-11 14:29
2008.01.13
Курсор на в области StringGrid


2-1197456069
VovIk
2007-12-12 13:41
2008.01.13
Как выполнять одинаковый код для всех окон проекта?




   Наверх