Thema: Delphi CD-Laufwerkslade offen?

Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#9

Re: CD-Laufwerkslade offen?

  Alt 25. Mär 2008, 07:53
Ich habe mal wieder versucht, mittels IOCTL zum Erfolg zu kommen.

Bei der Funktion:
Delphi-Quellcode:
Result := DeviceIOControl(DriveHandle,
                          IOCTL_STORAGE_CHECK_VERIFY,
                          NIL,
                          0,
                          NIL,
                          0,
                          nb,
                          NIL);
ist Result = False, wenn die Schublade geöffnet ist oder sich in der geschlossenen Schublade kein Datenträger befindet. Befindet sich in der Schublade ein Datenträger ist Result = True.

Mit der Funktion:
Delphi-Quellcode:
var
  VolumeLabel : Array[0..$FF] of Char;
  FileSystem : Array[0..$FF] of Char;
  SerialNumber: DWord;
  DW : DWord;
  FileSysFlags: DWord;
...

begin
...
Result := GetVolumeInformation(PChar(Format('%s:\', [cDrive])),
                               VolumeLabel,
                               SizeOf(VolumeLabel),
                               @SerialNumber,
                               DW,
                               FileSysFlags,
                               FileSystem,
                               SizeOf(FileSystem));
lässt sich dann feststellen, was eingelegt ist. Bei einer bespielten CD bzw DVD ist Result = True und VolumeLabel gibt den Namen des Datenträgers und das FileSystem CDFS oder beispielsweise UDF zurück. Ist der Datenträger leer, ist in der Regel Result = False und die Fehlermeldung heißt: "Unzulässige Funktion". In der Regel bedeutet, dass ich beim Einlegen eines CD-Rohlings Result = True und FileSystem = '' erhielt. Wurde dann ein DVD-Rohling eingelegt war Result = False. Anschließend ergab ein CD-Rohling ebenfalls das Ergebnis 'Unzulässige Funktion'.

Nachtrag: In der MSDN ist angegeben, dass IOCTL_STORAGE_CHECK_VERIFY keine Daten zurückliefert. Dem ist jedoch nicht so. Wenn man den lpOutBuffer verwendet, hat man einen Zähler, wie oft das Laufwerk geöffnet und geschlossen wurde. Der Zähler beginnt mit dem ersten Aufruf.
Miniaturansicht angehängter Grafiken
bild1_213.png  
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat