Ich habe viele Seiten mit der Frage gefunden, wie man in Delphi feststellen kann, ob die Laufwerkslade geöffnet oder geschlossen ist. Ausser in der BassCD.Dll habe ich keine nutzbare Funktion gefunden.
Unter Linux soll das funktionieren:
Zitat:
/* open device */
fd = open(device, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
fprintf (stderr, "%s: open failed for `%s': %s\n",
program, device, strerror (errno));
exit (1);
}
/* Check CD player status */
printf ("Drive status: ");
status = ioctl (fd, CDROM_DRIVE_STATUS, CDSL_CURRENT);
if (status<0) {
perror(" CDROM_DRIVE_STATUS");
} else switch(status) {
case CDS_DISC_OK:
printf ("Ready.\n");
break;
case CDS_TRAY_OPEN:
printf ("Tray Open.\n");
break;
case CDS_DRIVE_NOT_READY:
printf ("Drive Not Ready.\n");
break;
default:
printf ("This Should not happen!\n");
break;
}
Könnte man den ioctl-Befehl übersetzen und hoffen, dass die Funktion unter Windows existiert bzw herausfinden wie es in der BassCD.Dll funktioniert?
Als Definitionen habe ich bisher gefunden:
Zitat:
#define CDROMEJECT 0x5309 /* Ejects the cdrom media */
#define CDROMCLOSETRAY 0x5319 /* Reverse of CDROMEJECT */
#define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */
#define CDS_NO_INFO 0 /* if not implemented */
#define CDS_NO_DISC 1
#define CDS_TRAY_OPEN 2
#define CDS_DRIVE_NOT_READY 3
#define CDS_DISC_OK 4
Die blosse Übernahme der Konstante funktioniert natürlich nicht.