Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Do 24.05.12 11:30 
Ein freundliches Hallo an alle,

ich möchte den Laufwerkstyp eines beliebigen Laufwerkes ermitteln.

Ich verwende Delphi 4 und entwickle unter XP SP3.

Meine Versuche mit "GetDriveType" ergaben stets den gleichen Typ : "1". Auch ein direkter API-Aufruf ergab das gleiche Ergebnis! Excel-Basic liefert die Informationen, aber nicht über diese API, ein Aufruf von "GetDriveType" unter Excel erbrachte das gleiche Ergebnis wie Delphi, egal ob Usb-Stift, CD, Netzwerk oder Platte, stets war das Ergebnis "1". :(

Wer hat einen Tipp, wie ich sowohl unter einem alten Windows als auch unter einem neuen diese Informationen erhalte? Anscheinend liefert die "kernel32.dll" unter XP nicht mehr diese Information. Wie ich den Typ über ".Net" erhalte konnte ich bislang nicht herausfinden.

Vielen Dank für Eure Mühe und Grüße von der sonnigen Nordsee.

Peter


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Do 24.05.2012 um 13:03
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 24.05.12 19:05 
Wie sieht denn dein Quelltext aus? Da du als Rückgabewert 1 bekommst, also laut Doku DRIVE_NO_ROOT_DIR, hast du wohl das Laufwerk falsch angegeben:
msdn.microsoft.com/e...364939(v=vs.85).aspx
Zitat:
The root directory for the drive.

A trailing backslash is required.
Dementsprechend musst du z.B. c:\ angeben.
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Do 24.05.12 20:39 
Hier paar Funktionen die ich gelegentlich nutze:

ausblenden volle Höhe Delphi-Quelltext
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:
//Gibt die Volume-ID, also den Namen einer Partition zurück
//http://www.delphi-fundgrube.de/faq03.htm
function VolumeID(DriveChar: Char): string;
var
  OldErrorMode      : Integer;
  NotUsed, VolFlags : DWORD;
  Buf               : array [0..MAX_PATH] of Char;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    GetVolumeInformation(PChar(DriveChar + ':\'), Buf,
                         sizeof(Buf), nil, NotUsed, VolFlags,
                         nil0);
    Result := Format('[%s]',[Buf]);
  finally
    SetErrorMode(OldErrorMode);
  end;
end;

//Überprüft ob Laufwerk zur Nummer vorhanden
function DriveExists(DriveByte: Byte): Boolean;
begin
  Result := GetLogicalDrives and (1 shl DriveByte) <> 0;
end;

//Gibt Laufwerktypen zur Nummer. 
function DriveType(DriveByte: Byte): String;
begin
  case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of
    DRIVE_UNKNOWN:      Result := 'unbekannt';
    DRIVE_NO_ROOT_DIR:  Result := 'Laufwerk existiert nicht';
    DRIVE_REMOVABLE:    Result := 'Wechselmedium';
    DRIVE_FIXED:        Result := 'Festplatte';
    DRIVE_REMOTE:       Result := 'Netzwerk';
    DRIVE_CDROM:        Result := 'CD-ROM/DVD';
    DRIVE_RAMDISK:      Result := 'RAM Disk';
  else
    Result := 'anderer Laufwerkstyp';
  end;
end;

//Mix: Listet Laufwerktypen oder VolumeID des Lauwerks
function DriveTypeOrVolumeId(DriveByte: Byte): String;
begin
  case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of
    DRIVE_UNKNOWN:      Result := 'unbekannt';
    DRIVE_NO_ROOT_DIR:  Result := 'Laufwerk existiert nicht';
    DRIVE_REMOVABLE:    Result := 'Wechselmedium';
    DRIVE_FIXED:        Result := VolumeID(Chr(DriveByte + Ord('A'))); //'Festplatte';
    DRIVE_REMOTE:       Result := 'Netzwerk';
    DRIVE_CDROM:        Result := 'CD-ROM/DVD';
    DRIVE_RAMDISK:      Result := 'RAM Disk';
  else
    Result := 'anderer Laufwerkstyp';
  end;
end;

_________________
Popov
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 25.05.12 10:06 
Hallo jaenicke, hallo Popov,

danke Leute, Ihr habt mir die Augen geöffnet! :D Denn wer lesen kann ist klar im Vorteil!

In der Hilfe steht auch Pfad, aber ich habe zu kurz gedacht und nur die Laufwerksbuchstaben übergeben. So aber funktioniert auch ein UNC-Pfad!

Einen extra Dank an Popov für die Beispiele.

Freundliche Grüße von der sonnigen Nordsee

Peter