Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi GetLogicalDrives und VolumeLabel (https://www.delphipraxis.net/216053-getlogicaldrives-und-volumelabel.html)

Willie1 20. Okt 2024 16:52

GetLogicalDrives und VolumeLabel
 
Hallo Leute,

wie ich sehe, liefert GetLogicalDrives aus den IOUtils nur die Buchstaben und nicht die Laufwerksnamen. Das ist aber hilfreich. Den Quelltext liefert direkt die KI von Bing, das wäre kein Problem. IOUtils ist riesig: gibt es da vielleicht eine Komplettlösung mit den Volume-Namen. Außerdem wäre es schön, wenn das CD-Laufwerk außen vor bliebe, wenn kein Medium einliegt.

Hat jemand Rat oder kennt einen Link.

Gruß Willie.

Olli73 20. Okt 2024 17:41

AW: GetLogicalDrives und VolumeLabel
 
Da du schon Bing / CoPilot erwähnt hast, der kann diese Frage auch beantworten (TPath.GetVolumeName(Drive)):



Ja, du kannst auch die `IOUtils`-Einheit in Delphi verwenden, um die Laufwerksnamen zu ermitteln. Hier ist ein Beispiel, wie du dies umsetzen kannst:

Delphi-Quellcode:
uses
  System.SysUtils, System.IOUtils, System.Classes;

procedure TForm1.Button1Click(Sender: TObject);
var
  Drives: TStringDynArray;
  Drive: string;
  DriveList: TStringList;
begin
  DriveList := TStringList.Create;
  try
    Drives := TDirectory.GetLogicalDrives;
    for Drive in Drives do
    begin
      DriveList.Add(Drive + ': ' + TPath.GetVolumeName(Drive));
    end;
    ShowMessage(DriveList.Text);
  finally
    DriveList.Free;
  end;
end;
In diesem Beispiel wird die Methode `TDirectory.GetLogicalDrives` verwendet, um eine Liste der logischen Laufwerke zu erhalten. Anschließend wird `TPath.GetVolumeName` verwendet, um den Namen jedes Laufwerks zu ermitteln.

Falls du weitere Fragen hast oder Hilfe bei der Anpassung des Codes benötigst, lass es mich wissen! 😊

Olli73 20. Okt 2024 18:18

AW: GetLogicalDrives und VolumeLabel
 
Ich habe gerade nochmal nachgeschaut, die Methode gibt es nicht.

Naja, nicht das erste Mal, dass Copilot mir eine Funktion "erfindet", die mir unheimlich geholfen hätte, wenn es sie denn geben würde...

Willie1 20. Okt 2024 18:43

AW: GetLogicalDrives und VolumeLabel
 
Hallo,

ich habe im eigenen Archiv nachgesehen und bin fündig geworden. Mit SHGetFileInfo aus ShellAPI wird die fertige Lösung geliefert z.B. Windows (C:\) . Genau, was ich wollte. Die Lösung werde ich hier einstellen aber nicht mehr heute. Auch lässt sich aus dem Namen der LW-Buchstabe zurück ermitteln. War hier im Forum mehrfach Thema!

Willie.

Willie1 21. Okt 2024 09:26

AW: GetLogicalDrives und VolumeLabel
 
So geht es:
Delphi-Quellcode:
uses Winapi.ShellAPI;
function GetOneDrive(const Drive: string): string;
var
  FI: TSHFileInfo;
begin
  if SHGetFileInfo(
    PChar(Drive),
    0,
    FI,
    SizeOf(FI),
    SHGFI_DISPLAYNAME
  ) = 0 then
    RaiseLastOSError;
  Result := FI.szDisplayName;
end;

function GetAllDrives: TStringDynArray; overload;
var
  i: Integer;
begin
  Result := TDirectory.GetLogicalDrives;
  for i:=Low(Result) to High(Result) do
    Result[i] := GetOneDrive(Result[i]);
end;
Es wäre schön, wenn die Embas diese nützliche Routine in IOUtils aufnehmen würden. Dann brauchte man sich nicht mit dem Systemaufruf herum zu schlagen. Vergisst man wieder.

Gruß Willie.

himitsu 21. Okt 2024 09:40

AW: GetLogicalDrives und VolumeLabel
 
Zitat:

TPath.GetVolumeName
Lauf Hilfe gab es das zwischen 10.0 und 12.2 nicht.

Die XE- bis XE8-Hilfen werden im aktuellen DocWiki noch verlinkt, sind aber nicht mehr online. (ich glaub aber, die waren vorm letzten Servercrash schon weg)

Frickler 21. Okt 2024 12:27

AW: GetLogicalDrives und VolumeLabel
 
Zitat:

Zitat von himitsu (Beitrag 1542351)
Zitat:

TPath.GetVolumeName
Lauf Hilfe gab es das zwischen 10.0 und 12.2 nicht.

Die Onlinehilfe in XE6 meint dazu "Anmerkung: Die meisten von TPath zur Verfügung gestellten Methoden sind mit den Methoden der Klasse Path im .NET Framework bezüglich der Signatur kompatibel." Das dürfte der Grund sein, wieso der CoPilot die findet... :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz