CD eingelegt ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Was ist mit Leer-CD gemeint? Ein unbeschriebener CD-Rohling jedenfalls wird bei mir unter WinNT 4 SP6 und unter WinXP SP2 nicht als "LEER-CD-ROM eingelegt" angezeigt, sondern als "Keine CD-ROM eingelegt".

GetVolumeInformation_() gibt sowohl bei eingelegtem Rohling als auch bei leerem CD-Laufwerk den Wert 0 zurück, GetLastError_() liefert als Erklärung den Fehlercode 21, was mit FormatMessage_() aufbereitet die Fehlermeldung "Das Gerät ist nicht bereit" ergibt.
Zuletzt geändert von Shardik am 12.09.2006 14:37, insgesamt 1-mal geändert.
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag von Proton »

>>>DarkDragon: Hab mir mal erlaubt den Code etwas zu verschönern
>>>und erweitern:

Warum erlaubst du dir das? Ist Andreas unfähig schönen Code zu schreiben?
Schönheit ist subjektiv. Vielleicht gefällt es Andreas gar nicht, wie du seinen
Code "versaust" ?

Und wieso erweitern ? Eine Procedure Namens "CheckCDIn" wird wohl kaum
dazu benutzt werden, eine Festplatte auf ein CD-ROM Laufwerk zu überprüfen.

Ist nicht böse gemeint. Wollte es nur gesagt haben.
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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Proton

Contra.

natürlich gebührt Andreas Ehre dafür, die API-Funktion GetVolumeInformation_(
in dieser Form zu benutzen, und die erste wirklich brauchbare Lösung in diesem thread zu präsentieren.

allerdings ist der mehrfache aufruf von Trim(), der doppelte check von "CDBLANK",
das auslassen des Rückgabewertes "-1" für die auch bei Andreas vorhandene If-Sicherung,
und das unvollständige Einrücken etwas, was man verbessern kann.

und DD hat keine sprüche gemacht und hat sogar die Rem "; Autor: Andreas " ergänzt,
also wo ist das problem?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag von Proton »

@Falko: (@all)

Was ist das für ein Wert den FILESIZE("*.*") bei eingelegter CD zurückgibt ?


@Karoe Gaman:

Re
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.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Shardik hat geschrieben:Was ist mit Leer-CD gemeint? Ein unbeschriebener CD-Rohling jedenfalls wird bei mir unter WinNT 4 SP6 und unter WinXP SP2 nicht als "LEER-CD-ROM eingelegt" angezeigt, sondern als "Keine CD-ROM eingelegt".
War ja zu erwarten, dass es auf NT-Systemen anders läuft.

Hier noch ein Code ( für NT-Systeme ) der testet ob eine CD in Laufwerk liegt, egal ob beschrieben oder nicht.

Code: Alles auswählen

#IOCTL_STORAGE_CHECK_VERIFY = $2D4800

Procedure VerifyMedia(LW.s)
    ;Check for Media
    Protected hLwStatus.l
    hLwStatus = CreateFile_("\\."+LW,#GENERIC_READ|#GENERIC_WRITE, 0, 0, #OPEN_EXISTING, 0, 0)
    If hLwStatus
        Retval.l = DeviceIoControl_(hLwStatus, #IOCTL_STORAGE_CHECK_VERIFY,0,0,0,0,@RetBuffer,0)
        CloseHandle_(hLwStatus)
    EndIf
    ProcedureReturn Retval
EndProcedure

Select = VerifyMedia("P:");Pfad anpassen
  Case 1
    Debug "CD im Laufwerk"
  Case 0
    Debug "Keine CD im Laufwerk"
EndSelect
Gruss Andreas
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 »

Proton hat geschrieben:@Falko: (@all)

Was ist das für ein Wert den FILESIZE("*.*") bei eingelegter CD zurückgibt ?


@Karoe Gaman:

Re
ein Auszug aus der PB-Hilfe zeigt hier den Rückgabewert:
PB-Hilfe hat geschrieben:FileSize()

Syntax

Ergebnis = FileSize(DateiName$)
Beschreibung

Gibt die Größe der angegebenen Datei zurück.

Besondere 'Ergebnis' Werte:
-1: Datei wurde nicht gefunden.
-2: Datei ist ein Verzeichnis.

Unterstützte OS

Alle
Funktioniert ähnlich wie bei Andreas <)

Grüße ...Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag von Proton »

:)

Da wäre ich jetzt im Leben nie drauf gekommen, dass mir FILESIZE() die
Grösse einer Datei zurückgibt. Danke !

Die Betonung meiner Frage lag aber weniger auf FILESIZE(), sondern auf "*.*"

Bei unterschiedlichen CD/DVD's bekomme ich unterschiedliche Werte.
Gleiche Datenträger haben gleiche Werte. Kann aber auf die schnelle keine
Ableitung zu diesen Werten herstellen.

Also: Was bedeutet dieser Wert? Weiss das jemand ?
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
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 »

Achso, das meintest du. Kommt schon von DOS-Zeiten, wobei das "*.*"
einfach als Platzhalter für den unbekannten Dateinamen.Extender ist,
wie zum Beispiel Command.com oder andere Dateien. Wird nur bei der Suche von Dateien benötigt.
Gibst du einen Dateinamen anstelle *.* an, wird natürlich direkt nach dieser Datei gesucht.

Ich hoffe es ist so ausreichend erklärt.

Grüße ...Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag von Proton »

:| *seufz*

Versteht jemand meine Frage überhaupt ?


Nicht so wichtig :freak: :D
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
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 »

Proton hat geschrieben:@Falko: (@all)

Was ist das für ein Wert den FILESIZE("*.*") bei eingelegter CD zurückgibt ?


@Karoe Gaman:

Re
Das war die Frage und die Antwort ist nicht auf FileSize() bezogen, sondern auf den Rückgabewert "-1" und "-2" und dieses wurde ebenfalls beantwortet.


Die Frage ist wohl wirklich nicht zu verstehen, bzw. Gedanken kann ich nicht
lesen. :lol:

[Edit] Das einzigste ist, wenn man eine unbeschriebene CD ins Leselaufwerk einlegt, kommt nichts zurück, da das Laufwerk einen
Fehler mit Blinken sichtbar macht.
Dafür kommt aber bei einem CD-Brenner als auch DVD-Brenner korrekt
der Wert -1 zurück.

Kannst ja testen "Debug FileSize("y:\*.*")" ; y für CD-ROM bzw. Brenner
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten