CD eingelegt ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

CD eingelegt ?

Beitrag 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.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Beitrag 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.
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag 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.
Zitat:
"Ich kann mich vor die Meute stellen und für Nichts kämpfen. Ich kann aber auch einen Schritt zur Seite gehen, die Meute vorbeiziehen lassen und dabei meine Zeit angenehm bei Freunden verbringen.". Da hat er Recht, mein Pap's.
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Beitrag 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.
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag 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)
Zitat:
"Ich kann mich vor die Meute stellen und für Nichts kämpfen. Ich kann aber auch einen Schritt zur Seite gehen, die Meute vorbeiziehen lassen und dabei meine Zeit angenehm bei Freunden verbringen.". Da hat er Recht, mein Pap's.
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Beitrag 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 ???
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag 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
Gruss Andreas
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten