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