Einzelnen Beitrag anzeigen

Andreas Schilling

Registriert seit: 6. Sep 2006
106 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Über alle USB Anschlüsse iterieren, um ein bestimmtes Gerät zu finden

  Alt 25. Jul 2013, 06:02
Um USB-Laufwerke zu finden benutze ich immer folgenden Code.
Delphi-Quellcode:
  uses windows

procedure ...
  var
    strUSB_Drive : string;
    DriveList : TStringList;
    s: Char;
  //-----------------------------
  function GetDrives(var LW_List : TStringlist; DriveType:BYTE):byte;
    var Drives : array [1..255] of char;
        LWListe : TStringList;
        i : byte;
        Len : DWord;
  begin
    LWListe:=TStringList.Create;
    {Alle Laufwerke ermitteln}
    Len:=GetLogicalDriveStrings(255,@Drives);
    for i:=1 to Len-2 do
      if (i mod 4)=1 then
        LWListe.Add(copy(Drives,i,3));
    {Laufwerke des angegebenen Typs zählen}
    Result:=0;
    LW_list.Clear;
    for i:=0 to LWListe.Count-1 do begin
      if GetDriveType(PChar(LWListe[i]))= DriveType
      then begin
        Result:=Result+1;
        LW_List.Add(copy(LWListe[i],1,2))
      end;
    end;
    LWListe.Destroy;
  end;
  //------------------
begin
  DriveList:=TStringLIst.Create;
  {Wechselplatten:}
  GetDrives(Drivelist, DRIVE_REMOVABLE);

  if DriveList.count > 0
  then begin
    strUSB_Drive := '';
    for i := 0 to drivelist.count - 1
    do begin
      if (DriveList[i] <> 'A:')
      and (DriveList[i] <> 'B:')
      then strUSB_Drive := DriveList[i];
    end;
    if strUSB_Drive = ''
    then begin
      ShowMessage('Kein Wechseldatenträger an diesem Rechner angeschlossen');
      exit;
    end;

    S := strusb_Drive[1];
  end
  else begin
    ShowMessage('Kein Wechseldatenträger an diesem Rechner angeschlossen');
    exit;
  end;

  DriveList.Free;

  ....
end;
Wobei damals davon ausgegangen wurde, das immer nur ein USB-Stick am Rechner hängt. Mußt halt den Quelltext entsprechend anpassen.

Gruß Andreas
  Mit Zitat antworten Zitat