Zitat von
VizeTE:
Ich habe versucht was zur Statusabfrage herauszufinden. In Beiträgen wird oft auf die Funktionen DeviceIOControl und mciSendString verwiesen. Dabei ging es aber immer um die Abfrage ob das Laufwerk geöffnet oder geschlossen ist.
Ob ein Kaufwerk geöffnet oder geschlossen ist, kannst Du im fünften Beitrag dieses
Threads sehen. Dafür sind Schreib-/Brennrechte erforderlich.
Die Prüfung, ob auf die CD/DVD zugegriffen werden kann, kannst Du mit CreateFile erledigen. Ob auf eine eingelegte CD/DVD zugegriffen werden kann, kann man mit DeviceIOControl prüfen. Für NT, 2000 und XP zum Beispiel
Delphi-Quellcode:
...
uses
Windows, SysUtils;
...
function Drive_Access (const Drive: Char; var Status: Integer) : Boolean;
const
IOCTL_CDROM_CHECK_VERIFY = 149504;
var
DrivewHandle : THandle;
nb : DWord;
begin
Result := False;
DriveHandle := CreateFile(PChar('\\.\' + Drive + ':'),
GENERIC_READ,
FILE_SHARE_READ,
NIL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING,
0);
nb := 0;
if DriveHandle <> INVALID_HANDLE_VALUE
then
Result := DeviceIOControl(DriveHandle,
IOCTL_CDROM_CHECK_VERIFY,
NIL,
0,
NIL,
0,
nb,
NIL);
Status := GetLastError;
CloseHandle(DriveHandle);
end;
Anstelle von GetLastError kann man sich auch den entsprechenden String holen. Die Function funktioniert auch mit eingeschränkten Rechten da keine Schreib-/Brennrechte benötigt werden.