Seite 1 von 4
CD eingelegt ?
Verfasst: 11.09.2006 17:10
von John Doe
Hallo an alle,
ich hab schon in etlichen Foren rumgesucht, bisher aber nichts passendes gefunden.
Kennt jemand eine einfache Routine, mit der ich ermitteln kann, ob eine CD eingelegt ist, oder nicht. Kann auch eine API sein.
Der Laufwerksname ist bekannt.
Wäre dankbar für Unterstützung.
Verfasst: 11.09.2006 17:12
von AND51
Warum prüfst du das nicht mittels
ExamineDirectory()?
Es gibt API-Funktionen dafür, aber so brauchst du nur einen PB nativen Befehl. Ist doch praktisch...
Und wenn eine CD drin ist, meldet dein Programm:
CD reingeleeeeeeegt!

Verfasst: 11.09.2006 17:49
von John Doe
Mit ExamineDirectory hab ich auch schon versucht, jedoch bringt er mir als Rückgabe auch dann eine Null, wenn eine leere CD eingelegt ist.
Ebenso will ich den Befehl nutzen zur Überprüfung, ob eine Diskette eingelegt ist.
Auch dann erhalte ich Rückgabe Null, wenn die Diskette leer ist.
Verfasst: 11.09.2006 18:03
von Proton
Hm...na und ? Dann hast du halt Null.Wenn dein Programm einen beschriebenen
Datenträger erwartet, kannst du ja mit dieser Info auch etwas anfangen.
Verfasst: 11.09.2006 18:08
von John Doe
Was bringt mir das ?
Eine Null, wenn keine CD eingelegt ist und eine Null, wenn eine leere CD eingelegt ist.
Ich brauch ne Information, ob eine CD eingelegt ist oder nicht, egal ob sie leer oder beschrieben ist.
Verfasst: 11.09.2006 18:30
von Proton
Ich glaube mich erinnern zu können, dass es eine API gibt, die den
Insertet-State zurückliefert. Aber nur solange noch kein anderer Zugriff auf
den Datenträger erfolgte. Schau halt mal nach auf MSDN.
Ansonsten: ts-soft ist doch der wandelnde API-Listener. Der weiss es bestimmt

Verfasst: 11.09.2006 18:46
von John Doe
ohne Erfolg....
hab lediglich GetDriveType_ .... gefunden. mit dem man die vorhandenen Laufwerke und die Laufwerksart bestimmen kann.
hat vielleich noch jemand ne Idee ???
Verfasst: 12.09.2006 02:50
von Falko
Ich habe zwar dazu keine spezielle API gefunden, aber so könnte man sich
auch behelfen.
Code: Alles auswählen
If GetDriveType_("Z:")=5 ; Prüft ob dieses Laufwerk Z: ein CD-Laufwerk ist
If FileSize("z:\*.*") = -1
MessageRequester("Hinweis","Bitte legen sie eine CD ins Laufwerk")
EndIf
EndIf
Grüße ...Falko
Verfasst: 12.09.2006 10:27
von Andreas
So kannst Du auch prüfen ob eine LeerCD eingelegt ist.
Sollte sich für ein Diskette-Laufwerk anpassen lassen.
Code: Alles auswählen
Procedure CheckCDIn(Drive.s)
Protected Ret.l,FileSystemBuffer.s
If GetDriveType_(Drive) = #DRIVE_CDROM
FileSystemBuffer = Space(64)
GetVolumeInformation_(Drive,0,0,0,0,0,FileSystemBuffer,Len(FileSystemBuffer))
Ret = 0
If Trim(FileSystemBuffer) = "CDBLANK"
Ret = 2
EndIf
If Trim(FileSystemBuffer) <> "CDBLANK" And Trim(FileSystemBuffer) <> ""
Ret = 1
EndIf
EndIf
ProcedureReturn Ret
EndProcedure
Select CheckCDIn("Q:");Pfad anpassen
Case 2
Debug "LEER-CD eingelegt"
Case 1
Debug "Beschriebene CD eingelegt"
Case 0
Debug "Keine Cd eingelegt"
EndSelect
Verfasst: 12.09.2006 10:35
von DarkDragon
Andreas hat geschrieben:So kannst Du auch prüfen ob eine LeerCD eingelegt ist.
Sollte sich für ein Diskette-Laufwerk anpassen lassen.
...
Hab mir mal erlaubt den Code etwas zu verschönern und erweitern:
Code: Alles auswählen
; Autor: Andreas
Procedure CheckCDIn(Drive.s)
Protected Ret.l, FileSystemBuffer.s
Ret = 0
If GetDriveType_(Drive) = #DRIVE_CDROM
FileSystemBuffer = Space(64)
GetVolumeInformation_(Drive, 0, 0, 0, 0, 0, FileSystemBuffer, Len(FileSystemBuffer))
FileSystemBuffer = Trim(FileSystemBuffer)
If FileSystemBuffer = "CDBLANK"
Ret = 2
ElseIf FileSystemBuffer <> ""
Ret = 1
EndIf
Else
Ret = -1
EndIf
ProcedureReturn Ret
EndProcedure
Select CheckCDIn("D:") ; Pfad anpassen
Case 2
Debug "LEER-CD-ROM eingelegt"
Case 1
Debug "Beschriebene CD-ROM eingelegt"
Case 0
Debug "Keine CD-ROM eingelegt"
Case -1
Debug "Kein CD-ROM Laufwerk"
EndSelect