Чтобы перехватывать действия с USB портом, нужно обработать сообщение Windows WM_DEVICECHANGE. Ниже приведена программа, которая следит за состоянием USB портов.
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
public
{ Public declarations }
end;
const
DBT_DEVICEARRIVAL = $8000; // определение системой нового устройства
DBT_DEVICEQUERYREMOVE = $8001;
DBT_DEVICEQUERYREMOVEFAILED = $8002;
DBT_DEVICEREMOVEPENDING = $8003;
DBT_DEVICEREMOVECOMPLETE = $8004;
DBT_DEVICETYPESPECIFIC = $8005;
DBT_CONFIGCHANGED = $18;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
s : string;
begin
{ что-то делается }
case Msg.wParam of
DBT_DEVICEARRIVAL :
ShowMessage('Устройство подключено');
DBT_DEVICEQUERYREMOVE:
begin
s := 'Запрос на удаление устройства';
ShowMessage(s);
{ true разрешить удаление }
Msg.Result := integer(true);
exit;
end;
DBT_DEVICEQUERYREMOVEFAILED :
s := 'Запрос на удаление устройства был отменен';
DBT_DEVICEREMOVEPENDING :
s := 'Устройство может быть удалено';
DBT_DEVICEREMOVECOMPLETE :
ShowMessage('Устройство извлечено');
DBT_DEVICETYPESPECIFIC :
s := 'События конкретных устройств';
DBT_CONFIGCHANGED :
s:= 'Текущая конфигурация изменена'
else
s := 'Неизвестное сообщение устройства';
end;
if s <> '' then ShowMessage(s);
inherited;
end;
Комментарии