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