Ja OK, jetzt läuft das. Ich hoffe, es ist einigermaßen verständlich, was ich da mache. Ansonsten eben nochmal fragen.
Code
Proc GetData
Parameters Cmd$
' Statt vg+vg.xyz.de kann da alles Mögliche stehen, eigentlich gehört da rein:
' meinname+meineseite
' Die Angaben werden nicht geprüft, ist einfach eine Frage des Anstands,
' daß man sich ordentlich vorstellt, wenn man wo anruft und um eine Auskunft bittet ;-)
DownloadFile("http://freedb.freedb.org/~cddb/cddb.cgi?" + Cmd$ + "&hello=vg+vg.xyz.de+mv+v0.1&proto=1")
While %Loading
EndWhile
Return SubStr$($DownLoad, 1, " ")
EndProc
Proc GetCDInhalt
Parameters Cmd$
If GetData(Cmd$) = "210"
' $Download enthält jetzt alle Daten zur CD
' Es geht ein Edit auf und zeigt den Inhalt
Var Edit% = Create("MultiEdit", %HWnd, $DownLoad, 0, 0, Width(%HWnd, 0), -Height(%HWnd, 0))
While 1
WaitInput
EndWhile
' Statt dem Edit und der WaitInput-Schleife reale Datenauswertung
Else
MessageBox("Lesen des CD-Inhaltes gescheitert", "Fehler", 16)
EndIf
EndProc
Declare TitelZahl&, Pos$, Zeit$, DiskOffset$, URL$, DiskID$, Cat$
Declare StartMinute&, StartSekunde&, StartFrame&, StartOffset&, Minute&, Sekunde&, Frame&, Zeit&
MCISend$("open cdaudio")
If Lower$(MCISend$("Status cdaudio media present")) = "true"
TitelZahl& = Val(MCISend$("status cdaudio number of tracks"))
WhileLoop TitelZahl&
Pos$ = MCISend$("status cdaudio position track " + Str$(&Loop))
Print Str$(&Loop), Pos$
StartMinute& = Val(SubStr$(Pos$, 1, ":"))
StartSekunde& = Val(SubStr$(Pos$, 2, ":"))
StartFrame& = Val(SubStr$(Pos$, 3, ":"))
StartOffset& = (60 * 75 * StartMinute&) + (75 * StartSekunde&) + StartFrame&
DiskOffset$ = DiskOffset$ + "+" + Str$(StartOffset&)
EndWhile
Zeit$ = MCISend$("status cdaudio position track " + Str$(TitelZahl&))
StartMinute& = Val(SubStr$(Zeit$, 1, ":"))
StartSekunde& = Val(SubStr$(Zeit$, 2, ":"))
StartFrame& = Val(SubStr$(Zeit$, 3, ":"))
StartOffset& = (60 * 75 * StartMinute&) + (75 * StartSekunde&) + StartFrame&
Zeit$ = MCISend$("status cdaudio length track " + Str$(TitelZahl&))
Minute& = Val(SubStr$(Zeit$, 1, ":"))
Sekunde& = Val(SubStr$(Zeit$, 2, ":"))
Frame& = Val(SubStr$(Zeit$, 3, ":"))
Zeit& = (60 * 75 * Minute&) + (75 * Sekunde&) + Frame&
Zeit$ = Str$((Zeit& + StartOffset&) \ 75)
MCISend$("close cdaudio")
If GetData("cmd=discid+" + Str$(TitelZahl&) + DiskOffset$ + "+" + Zeit$) = "200"
DiskID$ = SubStr$($DownLoad, -1, " ")
Cat$ = GetData("cmd=cddb+query+" + DiskID$ + "+" + Str$(TitelZahl&) + DiskOffset$ + "+" + Zeit$)
If Cat$ = "200"
Cat$ = SubStr$($DownLoad, 2, " ")
GetCDInhalt("cmd=cddb+read" + "+" + Cat$ + "+" + DiskID$)
ElseIf Cat$ = "211"
' $Download enthält jetzt ab der 2. Zeile eine Liste möglicher CDs, je CD eine Zeile
' Ich hole mir jetzt der Einfachheit halber nur die erste Zeile
' Für den Anwender sollte eineAuswahlmöglihckeit bestehen, z.B. alle Zeilen in ChoiceBox
Cat$ = SubStr$($DownLoad, 2, "\n")
MessageBox(Cat$, "Die CD kann nicht eindeutig ermittelt werden", 64)
' DiskID und Cat$ (Kategorie) wie folgt aus der gewählten Zeile ermitteln
DiskID$ = SubStr$(Cat$, 2, " ")
Cat$ = SubStr$(Cat$, 1, " ")
' Und mit diesen Daten Inhalt abrufen
GetCDInhalt("cmd=cddb+read" + "+" + Cat$ + "+" + DiskID$)
Else
MessageBox("Der Inhalt der Disk kann nicht ermittelt werden", "Fehler", 16)
EndIf
Else
MessageBox("Disk-ID konnte nicht ermittelt werden", "Fehler", 16)
EndIf
Else
MessageBox("Keine Disk im Laufwerk", "Fehler", 16)
EndIf
Alles anzeigen
Die Proc GetCDInhalt wertet das eigentliche Ergebnis aus, statt dem Edit gehört hier das rein, was das Programm mit den empfangenen Daten (stehen in $Download) machen will. Also mit ein paar Stringfunktionen so zerlegen und an der richtigen Stelle anzeigen, wo Du es brauchst.
Alles, was der Code noch bei Problemen zu sagen hat, bringt er mit Messageboxen. Wäre also auch entsprechend anzupassen, je nachdem, wie das Programm das gerne hätte.
Gruß Volkmar