CD eingelegt ?
CD eingelegt ?
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.
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.
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!
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!

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
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.
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.
"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.
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
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

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.
"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.
- 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:
Ich habe zwar dazu keine spezielle API gefunden, aber so könnte man sich
auch behelfen.
Grüße ...Falko
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
So kannst Du auch prüfen ob eine LeerCD eingelegt ist.
Sollte sich für ein Diskette-Laufwerk anpassen lassen.
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
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Hab mir mal erlaubt den Code etwas zu verschönern und erweitern:Andreas hat geschrieben:So kannst Du auch prüfen ob eine LeerCD eingelegt ist.
Sollte sich für ein Diskette-Laufwerk anpassen lassen.
...
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.