Prüfen ob CDLaufwerk offen
-
Ich möchte gerne wissen ob mein CD-Laufwerk offen oder geschlossen ist.
Mit MCI geht es leider nicht.
Aber ich habe folgendes im Internet gefunden.
http://www.marcj.com/cdrom.html#Q3.07Da geht es zwar um MSDOS aber di Grundlaage ist laut FAQ IOCTL input/output.
Ich weiß, dass mal auch mit DeviceIoControl an die IOCTL rankommt.Weiß jemand wie genau das funktionieren soll ?
Eine fertige Funktion währe mir am liebsten.
Wenn jemand einen andere Art und Weise kennt um zu überprüfen ob das Laufwerk offen ist nehme ich dass natürlich auch gerne.
-
prüfen geht leider net genau sowenig die prüfung ob etwas im laufwerk liegt z.b. CD, DVD, Rohling, Salami, Pornoschnippsel oder Krümmel
-
was willst de denn damit machen? Vllt kann mam dir ja helfen...
-
Ich habe mir ein Programm geschrieben das mir im Systray immer sagt ob und welche CD im Laufwerk ist.
Jetzt soll es mir auch noch sagen ob das Laufwerk offen ist.
Damit ich es schliesen/öffnen kann. Der Menübefehl soll sich automtisch anpassen, je nachdem ob das Laufwerk offen oder zu ist.Herausfinden ob eine CD im Laufwerk ist übrigens kein Problem.
Für die Unwissenden:
Einfach mit GetVolumeInformation die Seriennummer des Datenträgers ermitteln, ist diese 0, so befindet sich keine CD im Laufwerk.
-
windows schickt an jedes programm beim oeffnen bzw. schliessen eine message. in der message steht dann ob geoeffnet oder geschlossen wurde. wennst die msgs mitlogst solltest immer wissen was los ist.
Meep Meep
-
Welche Message ist dass denn, denn ich habe mal eben schnell ein Fenster gesubclassed aber beim öffnen des CD-Laufwerks keine Message erhalten.
-
also Spy++ sagt, man bekommt eine WM_DEVICECHANGE nachricht
-
hola
auszug aus newsgroups:
Each time something changes in the hardware, the Windows system broadcasts the WM_DEVICECHANGE = &H219 message. wParam parameter of the message contains the value of the specific event and the lParam contains pointer to the address of a structure that contains event-specific data. Its meaning depends on the given event. When the CDROM door is opened wParam = DBT_DEVICEREMOVECOMPLETE, when it is closed wParam = DBT_DEVICEARRIVAL.Meep Meep
-
Das funktioniert ja wirklich
aber leider funktioniert es nur wenn bei zumachen des CD-Laufwerks eine CD eingelegt wurde und beim öffnen eine CD drin war. 
Kennt jemand jemand vielleicht noch eine andere Lösung.
-
Gefunden

Die Bibliothek BassCD.dll stellt diese Funktion ganz bequem über
BOOL WINAPI BASS_CD_DoorIsOpen( DWORD drive );zur Verfügung. http://www.un4seen.com
Kann mir vielleicht jemand (mit etwas Assembler Erfahrung) sagen wie genau die Dll das macht, damit ich mit meinen Programm nicht immer umständlich diese Dll mitliefern muss?
-
Ich denke mal die schicken einfach ein TEST UNIT READY per DeviceIoControl ans laufwerk
-
Ich sehe da nur Konstanten in der MSDN bezüglich DeviceIoControl wie genau muss der aufruf aussehen ?
-
Also ich sehe in der MSDN über DeviceIoControl mehr als nur Konstanten...
-
Ich meine natürlich wlchen ControlCode ich bei dwIoControlCode verwenden soll.
-
IOCTL_SCSI_PASS_THROUGH_DIRECT
Hier was über das TEST UNIT READY kommando:
http://www.linuxhaven.de/dlhp/HOWTO/DE-SCSI-Programmierung-HOWTO-10.html
Hier deine struktur:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/storage/hh/storage/structs-scsibus_64c46eef-e5bc-4e81-a479-2bdbd93605e7.xml.aspjetzt nur noch mit den infos aus link 1 das Cdb attribut (SCSI command) link 2 füllen das ganze ans drive schicken (falls du ein beispiel brauchst: http://cvs.gnome.org/viewcvs/nautilus-cd-burner/transport.hxx?rev=1.5 Scsi_Command - natürlich nur die WIN32 version für interessant
)
-
Untern dem Link steht aber, dass man damit ermittelt ob ein Medium im Luafwerk ist, ich möchte aber wissen ob dass CD Laufwerk offen oder geschlossen ist (unabhängig davon ob ein Mdeium darin liegt).
-
Hmm... geht das jetz noch weiter? Hat jmd ne Lsg???