Определяем USB-устройства

Печать
Статьи

Чтобы перехватывать действия с 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;