Entwickler-Ecke

Windows API - Auflistung der Laufwerke


Peter18 - Fr 26.08.16 12:33
Titel: Auflistung der Laufwerke
Ein freundliches Hallo an alle,

ich möchte eine Liste der vorhandenen Laufwerke haben. Die kann ich natürlich mit "TDriveComboBox" erhalten. Vielleicht gibt es aber auch noch eine Möglichkeit direkt eine Stringliste zu erhalten, ohne eine ComboBox zu bemühen.

Ich habe in der Hilfe jedenfalls nichts gefunden. Manchmal muß man eben wissen wie das heißt, was man sucht.

Grüße von der etwas warmn und sonnigen Nordsee ( 26° 85% [tropf, tropf] )

Peter


Delete - Fr 26.08.16 13:01

- Nachträglich durch die Entwickler-Ecke gelöscht -


Peter18 - Fr 26.08.16 13:31

Hallo Frühlingsrolle, (schmackhafter Name)

Dank Dir für die Antwort! (Sie sind importiert) In der Tat, ich will die Liste der Laufwerke mit "GetDriveType" prüfen und das CD/DVD-Laufwerk finden. Es gibt also keine Funktion, die eine Stringliste erstellt, wie sie für "TDriveComboBox" gebraucht wird, (darauf hatte ich spekuliert) oder kann ich das Ergebnis von GetLogicalDriveStrings direkt als Stringliste verwenden?

Ich glaube ein bischen Bitpulerei ist da warscheinlich einfacher.

Grüße von der Nordsee

Peter


Delete - Fr 26.08.16 15:38

- Nachträglich durch die Entwickler-Ecke gelöscht -


t.roller - Fr 26.08.16 18:11


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure List_CDROM_Drives;
const
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;
var
  r: LongWord;
  Drives: array[0..128of char;
  pDrive: PChar;
begin
  Form1.DriveComboBox1.Items.clear;  // Form evtl. anpassen
  r := GetLogicalDriveStrings(SizeOf(Drives), Drives);
  if r = 0 then Exit;
  if r > SizeOf(Drives) then
    raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
  pDrive := Drives;
  while pDrive^ <> #0 do
  begin
    if GetDriveType(pDrive) = DRIVE_CDROM then
       Form1.DriveComboBox1.Items.Add(pDrive); // Form evtl. anpassen
    Inc(pDrive, 4);
  end;
  Form1.DriveComboBox1.ItemIndex := 0// Form evtl. anpassen
  Form1.DriveComboBox1.Items.AddObject('vsIcon', TObject(vsIcon)); // Form evtl. anpassen
end;


Peter18 - Mi 07.09.16 13:28

Ein freundliches Hallo an alle,

Dank Euch für Eure Lösungen! Habe ganz vergessen, dass diese Frage noch offen war. Mit etwas Bitpulerei bin ich zu folgender Lösung gekommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function GetCD_Drive: String;
var
  Dr : DWORD  ;
  I  : Integer;
  Cd : String ;

begin
  Result := ''              ;
  Dr     := GetLogicalDrives;
  I      := 0               ;
  While (Result = ''and (I < 27do
  begin
    if Dr and $0001 > 0 then
    begin
      Cd := Chr( 65 + I ) + ':\';
      if GetDriveType( PChar( Cd ) ) = DRIVE_CDROM then Result := Cd;
    end;
    Dr := Dr shr 1;
    I  := I + 1   ;
  end;
end;

Grüße von der sonnigen Nordsee (noch 22°)

Peter