Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Volumennamen eines Mapped Network Drives herausfinden (https://www.delphipraxis.net/196106-volumennamen-eines-mapped-network-drives-herausfinden.html)

Shadowwalker 23. Apr 2018 19:31

AW: Volumennamen eines Mapped Network Drives herausfinden
 
ExpandUNCFileName macht aus einem Pfad wie \\NAS\share etwas wie C:\Users\....\aktuelles verzeichnis\\NAS\share.

Die Lösung mit WNetGetConnection gibt mir genau das zurück was ich suche.
Lässt sich das auch auf Laufwerke aller Typen anwenden?

timog 23. Apr 2018 19:59

AW: Volumennamen eines Mapped Network Drives herausfinden
 
Zitat:

Zitat von Shadowwalker (Beitrag 1400279)
Lässt sich das auch auf Laufwerke aller Typen anwenden?

Welche Typen meinst Du denn?

Shadowwalker 23. Apr 2018 19:59

AW: Volumennamen eines Mapped Network Drives herausfinden
 
Der Typ ist unwichtig. Einfach quer durch von A bis z =)

Es geht ja da drum, dass man durch alle Laufwerke gehen kann und den Anzeigenamen bekommt.
Aber wenn die Eingabe sowas wie \\NAS\files_shadow ist, sind die mir bekannten Windows-Funktionen nicht mehr arbeitsfähig.

Meine Variante / Idee, die aber einen gravierenden Nachteil hat: ich werde die Eingabe \\NAS... in keinster Weise mehr aus.

Delphi-Quellcode:
procedure GetDiskDriveLetters(List: TStringList);
var
 vDrivesSize: Cardinal;
 vDrives: array [0 .. 128] of Char;
 vDrive: PChar;
begin
 List.BeginUpdate;

 try
  List.Clear;
  vDrivesSize := GetLogicalDriveStrings(SizeOf(vDrives), vDrives);

  if vDrivesSize = 0 then
   Exit;

  vDrive := vDrives;

  while vDrive^ <> #0 do
   begin
    List.Add(StrPas(vDrive));
    Inc(vDrive, SizeOf(vDrive));
   end;
 finally
  List.EndUpdate;
 end;
end;

function GetVolumeName(const aDriveLetter: Char): string;
var
 DriveInfo: TSHFileInfo;
 Res: string;
 sl: TStringList;
 i: Integer;
begin
 sl := TStringList.Create;

 try
  GetDiskDriveLetters(sl);

  for i := 0 to sl.Count - 1 do
   begin
    if AnsiSameText(AnsiUpperCase(aDriveLetter) + ':\', AnsiUpperCase(sl.Strings[i])) then
     begin
      FillChar(DriveInfo, SizeOf(DriveInfo), 0);

      if SHGetFileInfo(PChar(aDriveLetter + ':\'), 0, DriveInfo, SizeOf(DriveInfo), SHGFI_DISPLAYNAME) <> 0 then
       Res := Trim(StringReplace(DriveInfo.szDisplayName, ' (' + Copy(aDriveLetter + ':\', 1, 2) + ')', '', [rfReplaceAll])) // Lokaler Datenträger (C:) => Lokaler Datenträger
      else
       RaiseLastOSError;

      Break;
     end;
   end;
 finally
  sl.Free;
 end;

 Result := Res;
end;


var
 LDrive: Char;
 LPathRemote: array [0 .. MAX_PATH] of Char;
 LPathLength: DWORD;
 VolumeName: string;
begin
 for LDrive := 'A' to 'Z' do
  begin
   VolumeName := GetVolumeName(LDrive);
 
   if VolumeName .... then
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 2 von 2     12   

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