Как корректно определить изменения в оборудовании PlugNPlay?

Материал из DRKB

Как корректно определить изменения в оборудовании PlugNPlay?[править | править код]

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
    procedure WMDeviceChange(var Message: TMessage);
      message WM_DEVICECHANGE;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

const DBT_DEVICEARRIVAL = $8000;
const DBT_DEVICEQUERYREMOVE = $8001;
const DBT_DEVICEQUERYREMOVEFAILED = $8002;
const DBT_DEVICEREMOVEPENDING = $8003;
const DBT_DEVICEREMOVECOMPLETE = $8004;
const DBT_DEVICETYPESPECIFIC = $8005;
const DBT_CONFIGCHANGED = $0018;

procedure TForm1.WMDeviceChange(var Message: TMessage);
var
  s: string;
begin
  { Do Something here }
  case Message.wParam of
    DBT_DEVICEARRIVAL:
      s := 'A device has been inserted and is now available';
    DBT_DEVICEQUERYREMOVE: begin
      s := 'Permission to remove a device is requested';
      ShowMessage(s);
      { True grants premission }
      Message.Result := integer(true);
      exit;
    end;
    DBT_DEVICEQUERYREMOVEFAILED:
      s := 'Request to remove a device has been canceled';
    DBT_DEVICEREMOVEPENDING:
      s := 'Device is about to be removed';
    DBT_DEVICEREMOVECOMPLETE:
      s := 'Device has been removed';
    DBT_DEVICETYPESPECIFIC:
      s := 'Device-specific event';
    DBT_CONFIGCHANGED:
      s := 'Current configuration has changed'
    else
      s := 'Unknown Device Message';
  end;
  ShowMessage(s);
  inherited;
end;


ID: 01334