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! :lol:

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 8)

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