![]() |
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? |
AW: Volumennamen eines Mapped Network Drives herausfinden
Zitat:
|
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. |
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