| Autor |
Beitrag |
MaxiTB
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Fr 25.04.03 13:55
Ich möchte auf einem System alle vorhanden Volumes enumerieren.
Sprich A:, C:, D:, usw.
Allerdings möchte ich auch zusätzlich zum Namen noch prinzipielle Geräteinformationen erhalten ... extakt: ReadOnly und Removeable.
Tjo - und jetzt wirds gefinkelt ... eigentlich nicht nur unter Windows sondern auch unter Linux (also die gemounteten Devices plus eben den Pfad dazu - keine Angst, Win32 reicht einmal für den Anfang *g*).
Hat jemand eine Idee, wie ich die Infos rausbekommen ohne einen Zugriff auf die Volumes zu machen (ich sag nur Diskratterratterratter *g*) ?
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
Zuletzt bearbeitet von MaxiTB am Mo 28.04.03 09:42, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.04.03 19:13
|
|
MaxiTB 
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Mo 28.04.03 09:45
Titel: Enumerieren ...
@Luckie
Gefinkelt ? Selbe wie fuchsig  ...
Ähm ... Code 1 hat eben den Nachteil des Zugriffs aufs Laufwerk ... aber die zweite Variante ist spitze ... was Windose angeht ... fehlt ja eigentlich nur noch die Linux-Variante ...
@Tino
Uupsss ... sorry ... schon geändert.
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 28.04.03 14:51
Ohne Zugriff auf das Laufwerk, wirst du es nicht prüfen können. Wenn ich im Dunkeln wissen will, ob meine Freundin neben mir liegt, muß ich auch tasten und sie berühren. 
|
|
MaxiTB 
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Mo 28.04.03 15:03
Titel: Stimmt nicht ganz ...
Windows checkt schon beim Starten alle verfügbaren Device-Informationen (Linux hat eine mount list; nur wie krieg ich die Infos) - ich will ja nicht wissen, wie der Datenträger im Laufwerk heißt, sondern was für ein Gerät es ist (siehe erstes Posting) ... dafür ist wirklich kein Zugriff nötig und bei vielen Apps die ich kenne, wird auch keiner gemacht (denke nur mal an die lustige MS DriveList Combo ... da rattert auch erst das Diskdrive, wenn man es auswählt  ).
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 28.04.03 16:02
Hallo MaxiTB!
Ich habe im Moment wenig Zeit, kann dir deshalb nur ein Codeschnipsel aus einem meiner Programme anbieten. Ich hoffe das wichtigste findest du daraus heraus: 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: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| procedure TMainForm.AddDrives(Drive: String); const DriveTypes: Array [0..6] of String = ('Unbekanntes Laufwerk', 'Kein Stammlaufwerk', 'Wechseldatenträger', 'Festplatte', 'Netzlaufwerk', 'CD-Rom-Laufwerk', 'Speicherlaufwerk'); var NodeData: PNodeData; Node: PVirtualNode; R: DWord; Drives: Array[0..128] of Char; pDrive: PChar; DriveType: Integer; begin FilesVST.Clear; R := GetLogicalDriveStrings(SizeOf(Drives), Drives); if R <> 0 then begin if R > SizeOf(Drives) then begin raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY)); Exit; end; pDrive := Drives; while pDrive^ <> #0 do begin New(NodeData); with NodeData^ do begin with FileData do begin Name := pDrive; IsDirectory := True; end; DriveType := GetDriveType(PChar(Upcase(pDrive[0]) + ':\')); if DriveType in [DRIVE_FIXED, DRIVE_CDROM] then Caption := GetDriveName(pDrive) + '(' + Upcase(pDrive[0]) + ':)' else Caption := DriveTypes[DriveType] + ' (' + Upcase(pDrive[0]) + ':)'; Name := pDrive[0] + ':'; AddFileIcon(FileData.Name, ImageIndex, False); end; Node := AddNode(nil, NodeData); if not IsEmptyDir(Drive) then FilesVST.AddChild(Node); Inc(pDrive, 4); end; end else MessageDlg('Fehler beim Laden der Laufwerke!', mtError, [mbOk], 0); end;
function GetDriveName(const Drive: String): String; var MaxLength, Flags: DWord; Buf: Array[0..MAX_PATH] of Char; begin if GetVolumeInformation(PChar(Drive), Buf, SizeOf(Buf), nil, MaxLength, Flags, nil, 0) then begin if Trim(StrPas(Buf)) <> '' then Result := StrPas(Buf) + ' ' else Result := ''; end else Result := ''; end; | Teile davon sind, glaub ich, vom SwissDelphiCenter.
Gruß wulfskin!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
MaxiTB 
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Mo 28.04.03 16:06
Titel: Daunkschen !
Hab mir schon die GetDriveType reingezogen - allerdings hab ich noch keine Kylix Lösung ... die Windows Variante läuft aber schon ohne Rattern *g*.
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
|
|
|