Medium im CD-/DVD-LW erkennen [Update]
Verfasst: 11.11.2007 01:18
moin,moin...
Der Code mag weder effizient noch elegant oder beispielhaft sein, aber er ist cool, weil es die einzige Möglichkeit ist, mit der ich es schaffe, von PB aus die richtigen Infos auszulesen
Ist zwar bitter, daß ich CDRecord und die CygWin.dll brauche, aber vielleicht kommt ja irgendwann jemand mit einer besseren Lösung.
Getestete Laufwerke: LG 4163b und Samsung SH-S182D.
Getestete Medien: leere+gebrannte CD-R, c't-CD-ROM,CD-RW, DVD-RAM, c't-DVD-ROM,leere+gebrannte DVD-R, gebrannte DVD+R, DVD+RW.
Über zusätzliche Testergebnisse oder Verbesserungen würde ich mich selbstverfreilich freuen
Have fun:
un jezz guck ich Final Fantasy

scholly
Der Code mag weder effizient noch elegant oder beispielhaft sein, aber er ist cool, weil es die einzige Möglichkeit ist, mit der ich es schaffe, von PB aus die richtigen Infos auszulesen

Ist zwar bitter, daß ich CDRecord und die CygWin.dll brauche, aber vielleicht kommt ja irgendwann jemand mit einer besseren Lösung.
Getestete Laufwerke: LG 4163b und Samsung SH-S182D.
Getestete Medien: leere+gebrannte CD-R, c't-CD-ROM,CD-RW, DVD-RAM, c't-DVD-ROM,leere+gebrannte DVD-R, gebrannte DVD+R, DVD+RW.
Über zusätzliche Testergebnisse oder Verbesserungen würde ich mich selbstverfreilich freuen

Have fun:
Code: Alles auswählen
; Typ das Mediums in einem CD-/DVD-LW herausfinden
; autor: scholly
; notwenig: 1. wmi-include von TS-Soft: http://www.purebasic.fr/german/viewtopic.php?t=2925&start=14
; 2. cdrecord + cygwin1.dll : http://www.paehl.com/open_source/?CDRTOOLS_with_DVD_Support
IncludeFile "wmi.pbi"
EnableExplicit
Define.s lw2check.s = "z:\" ; In der richtigen Anwendung wird das LW irgendwo festgelegt
lw2check = Left(lw2check,2)
Define.s gefunden.s = ""
Define.s lwcaption.s
Define.s tempstr.s
Define.s devstr.s
Define.s mtype.s
Define.l cdrout
lw2check = Left(lw2check,2)
WMI_INIT()
WMI_Call("Select * FROM Win32_CDROMDrive", "drive, Caption")
ResetList(wmidata())
While NextElement(wmidata())
gefunden = wmidata()
Debug gefunden
If (gefunden = UCase(lw2check))
NextElement(wmidata())
lwcaption = wmidata()
Break
EndIf
Wend
WMI_RELEASE("OK")
If lwcaption = "" ; dann gibts kein CD-/DVD-LW mit diesem Laufwerksbuchstaben
Debug "NoOptical"
End
EndIf
lwcaption = Left(lwcaption,8)
Debug "lwcaption: "+lwcaption
If OpenFile (1,"scanbus_kannweg.bat")
WriteString(1,"cdrecord -scanbus >scanbus.kannweg.txt 2>&1")
CloseFile(1)
cdrout = RunProgram("scanbus_kannweg.bat", "", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Delay(4000) ; müßte auf das langsamste LW abgestimmt werden
If ReadFile(2, "scanbus.kannweg.txt")
While Eof(2) = 0
tempstr = ReadString(2)
If ( FindString(tempstr, lwcaption,1))
devstr = Left(LTrim(ReplaceString(tempstr,Chr(9)," ")),5)
EndIf
Wend
CloseFile(2)
DeleteFile("scanbus.kannweg.txt")
Else
MessageRequester("uups","kann scanbus.kannweg.txt nicht öffnen")
EndIf
DeleteFile("scanbus_kannweg.bat")
Else
MessageRequester("uuups","keine scanbus_kannweg.bat geöffnet")
EndIf
Debug devstr
If OpenFile(3,"getMtype_kannweg.bat")
WriteString(3,"cdrecord dev="+devstr+" -minfo >getMtype_kannweg.txt 2>&1")
CloseFile(3)
cdrout = RunProgram("getMtype_kannweg.bat", "", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Delay(4050) ; Auf dem LG dauert eine CD-R so lange :((((
If ReadFile(4,"getMtype_kannweg.txt")
While Eof(4) = 0
tempstr = ReadString(4)
If (Left(tempstr,19) = "Mounted media type:")
Debug LTrim(RemoveString(tempstr,"Mounted media type:"))
mtype = StringField(LTrim(RemoveString(tempstr,"Mounted media type:")),1," ")
Debug mtype
Debug Len(mtype)
EndIf
Wend
CloseFile(4)
DeleteFile("getMtype_kannweg.txt")
Else
MessageRequester("uups","kann getMtype_kannweg.txt nicht öffnen")
EndIf
DeleteFile("getMtype_kannweg.bat")
Else
MessageRequester("uuups","keine getMtype_kannweg.bat geöffnet")
EndIf
Debug mtype
End



scholly