Einzelnen Beitrag anzeigen

Shadowwalker

Registriert seit: 23. Apr 2018
22 Beiträge
 
#13

AW: Volumennamen eines Mapped Network Drives herausfinden

  Alt 23. Apr 2018, 19:59
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 := 'Ato 'Zdo
  begin
   VolumeName := GetVolumeName(LDrive);
  
   if VolumeName .... then
  end;
end;

Geändert von Shadowwalker (23. Apr 2018 um 20:40 Uhr)
  Mit Zitat antworten Zitat