unit DetectUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TDetectForm = class(TForm) Panel1: TPanel; DeviceList: TListBox; GoButton: TButton; DetectButton: TButton; StatusMemo: TMemo; procedure DetectButtonClick(Sender: TObject); procedure GoButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); public DeviceIndex: LongWord; end; implementation {$R *.DFM} uses AIOUSB; var DeviceOK: array[0..7] of Boolean; procedure TDetectForm.FormCreate(Sender: TObject); begin DetectButton.Click; DeviceList.ItemIndex := 0; end; procedure TDetectForm.DetectButtonClick(Sender: TObject); var DeviceMask: LongWord; PID, NameSize: LongWord; Name: String; I: Integer; Found: Boolean; begin DeviceList.Items.Clear; Found := False; DeviceMask := GetDevices; for I := 0 to 7 do begin DeviceOK[I] := False; if (DeviceMask and (1 shl I)) <> 0 then begin NameSize := 256; SetString(Name, nil, NameSize); QueryDeviceInfo(I, @PID, @NameSize, PChar(Name), nil, nil); SetLength(Name, NameSize); case PID of $8004: begin //USB-DIO-32I DeviceOK[I] := True; Found := True; end; else Name := Name + ' '; end; end else Name := '' ; DeviceList.Items.Add(IntToStr(I) + ': ' + Name); end; if Found then StatusMemo.Lines.Text := 'Select the device you want to work with and click Go.' else StatusMemo.Lines.Text := 'No compatible devices found; your device may not be installed, or may not be installed properly. Click Redetect to check again.' ; end; procedure TDetectForm.GoButtonClick(Sender: TObject); var I: Integer; begin I := DeviceList.ItemIndex; if (I = -1) //No device index selected or (not DeviceOK[I]) //Invalid device index selected then begin Beep; Exit; end; DeviceIndex := I; ModalResult := mrOK; end; end.