Und nochmals danke. Kannst du eventuell noch bei "Get" weiterhelfen?
MediaInfo.dll und XProfan
-
-
-
Ich habs jetzt erstmal so gelöst, dass der String entsprechend nach der gewünschten Information zerpflückt wird. Ist relativ langsam, aber es geht.
-
Für alle, die brennend daran interessier sind was ich eigentlich zusammenschuster:
Damit ich schnell weiß welcher Film wo ist und in welcher Qualität. Das Programm ist aber wirklich nur schnell zusammengekloppt. Die Filterfunktion ist nicht besonders schnell. MediaInfo.dll im Programmordner nicht vergessen.Erklärung:
- "Ordner" verwaltet die Ordner, die durchsucht werden
- "Einlesen" liest die Ordner ein
- "Speichern" speichert das Ergebnis in einer Textdatei ab
- "Laden" liest die Textdatei wieder ein, wenn man nicht alle einlesen will sondern auf ein älteres Ergebnis zurückgreifen will.Code
Alles anzeigen$H D:\XProfan\XProfan\INCLUDE\windows.ph Def $Ver "1.0" declare liste&,l2&,neu&,suche&,ende%,ende&,dll&,handle&,log%,save&,load&,txt&,fldr&,ordnr&,del&,suche$,st&,foc% proc AddFilStr Parameters p$ AddString(liste&,p$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,1,"|"))):AddString(l2&,p$) endproc proc loadordner Parameters r& declare o$,o&,p$ Clearlist r& o$=$ProgDir+"ordner.txt" if FileExists(o$) if FileSize(o$)>0 o&=Assign(o$) Reset #o& whilenot EOF(#o&) Input #o&,p$ AddString(r&,p$) endwhile Close #o& Assign #o&,"" endif endif endproc proc ordner declare w&,l&,a&,d&,o&,e&,e%,o$,h&,t$ w&=Create("Dialog",%hWnd,"Ordner verwalten",600,300,416,400) l&=Create("Listbox",w&,1,8,8,284,352) a&=Create("Button",w&,"Hinzufügen",300,8,96,24) d&=Create("Button",w&,"Löschen",300,40,96,24) o&=Create("Button",w&,"Speichern",300,304,96,24) e&=Create("Button",w&,"Abbrechen",300,336,96,24) loadordner l& whilenot e% EnableWindow d&,GetCurSel(l&)<>-1 waitinput if Clicked(a&) o$=ChooseDir$("Verzeichnis wählen:") case o$<>"":AddString(l&,o$) elseif Clicked(d&) DeleteString(l&,GetCurSel(l&)) elseif Clicked(o&) h&=Assign($ProgDir+"Ordner.txt") Rewrite #h& whileloop 0,GetCount(l&)-1 t$=GetString$(l&,&Loop) case t$<>"":Print #h&,t$ endwhile Close #h& Assign #h&,"" Inc e% elseif Clicked(e&) Inc e% endif endwhile loadordner ordnr& DestroyWindow(w&) endproc proc ConvertBytes$ Parameters d! declare r$ log%=0 while d!>1024 d!=d!/1024 Inc log% endwhile r$=Str$(d!) r$=Left$(r$,InStr(".",r$)+2) Return r$ endproc proc getinfo Parameters p$,info$,section$,cut$ if section$<>"" p$=Del$(p$,1,Instr(section$+"\n",p$)) endif p$=Del$(p$,1,InStr(info$,p$)) p$=Del$(p$,1,InStr(":",p$)+1) p$=Left$(p$,InStr("\n",p$)) case cut$<>"":p$=Translate$(p$,cut$,"") Return p$ endproc Proc Search declare s$,fold&,d$,p$,f$ Clearlist liste& Clearlist l2& whileloop 0,GetCount(ordnr&)-1 fold&=&Loop d$=GetString$(ordnr&,fold&) ChDir d$ s$=FindFirst$("*.*") whilenot %IOResult' OR (GetCount(liste&)>30) if FileExists(d$+s$) AddString(liste&,s$+"|"+d$) endif s$=FindNext$() endwhile endwhile whileloop 0,GetCount(liste&)-1 s$=GetText$(liste&,&Loop,0) d$=GetText$(liste&,&Loop,1) f$=d$+s$ MI_MediaInfoA_Open(handle&,f$) p$=String$(MI_MediaInfoA_Inform(handle&,0),0) case (suche$="") OR InStr(Lower$(suche$),Lower$(s$)):AddString(l2&,s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|"+GetInfo(p$,"Duration")+"|"+GetInfo(p$,"Format","Video")+"|"+Translate$(GetInfo(p$,+"Width","Video","pixels")+"*"+GetInfo(p$,"Height","Video","pixels")," ","")+"|"+GetInfo(p$,"Bit rate ","Video"," ")+"|"+GetInfo(p$,"Format","Audio")+"|"+GetInfo(p$,"Bit rate ","Audio"," ")) MI_MediaInfoA_Close(handle&) SetText st&,"Einlesen: Datei "+Str$(&Loop)+"/"+Str$(GetCount(liste&))+" ("+Format$("##0.00",100*&Loop/GetCount(liste&))+"%)" endwhile endproc proc load declare l&,t$ if FileExists($ProgDir+"Filmliste.txt") l&=Assign($ProgDir+"Filmliste.txt") Reset #l& Whilenot EOF(#l&) Input #l&,t$ AddFilStr(t$) endwhile Close #l& Assign #l&,"" endif endproc proc save declare l&,t$ l&=Assign($ProgDir+"Filmliste.txt") Rewrite #l& Whileloop 0,GetCount(liste&)-1 Print #l&,GetString$(liste&,&Loop) endwhile Close #l& Assign #l&,"" endproc proc enable Parameters d%,p$ EnableWindow neu&,(GetCount(ordnr&)<>0) AND d% EnableWindow fldr&,d% EnableWindow load&,FileExists($ProgDir+"Filmliste.txt") AND d% EnableWindow save&,d% EnableWindow suche&,d% EnableWindow ende&,d% EnableWindow liste&,d% case p$<>"":SetText st&,p$ endproc proc einlesen declare p$ enable 0,"Filter anwenden..." Clearlist l2& whileloop 0,GetCount(liste&)-1 p$=GetString$(liste&,&Loop) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,1,"|"))):AddString(l2&,p$) endwhile endproc WindowStyle 282 WindowTitle "Mediathek "+$Ver window 200,100-1492,804 cls ~GetSysColor(15) neu&=Create("Button",%hWnd,"Einlesen",8,8,96,24) fldr&=Create("Button",%hWnd,"Ordner",112,8,96,24) load&=Create("Button",%hWnd,"Laden",216,8,96,24) save&=Create("Button",%hWnd,"Speichern",320,8,96,24) Create("Text",%hWnd,"Filter:",424,12,44,24) suche&=Create("Edit",%hWnd,"",468,8,240,24) del&=Create("Button",%hWnd,"X",708,8,24,24) ende&=Create("Button",%hWnd,"Beenden",1380,8,96,24) st&=Create("StatusWindow",%hWnd,"Laden...") ordnr&=Create("List",1) loadordner ordnr& liste&=Create("Grid",9,1) l2&=Create("Gridbox",%hWnd,"Dateiname;0;500;Pfad;0;200;Größe;1;80;Länge;1;80;Codec;0;100;Auflösung;0;80;Bitrate;1;72;Audiocodec;0;100;Bitrate;1;72",0,8,40,1468,700) dll&=Importdll($ProgDir+"MediaInfo.dll","MI_") handle&=MI_MediaInfoA_New() Usermessages 16 whilenot ende% enable 1,"Bereit..." case foc%:SetFocus(suche&) waitinput foc%=GetFocus(suche&) if Clicked(ende&) OR (%UMessage=16) OR MenuItem(4000) Inc ende% elseif Clicked(del&) SetText suche&,"" suche$="" einlesen Inc foc% elseif GetFocus(suche&) if suche$<>GetText$(suche&) suche$=GetText$(suche&) einlesen endif elseif Clicked(neu&) enable 0,"Einlesen..." Search elseif Clicked(save&) enable 0,"Speichern..." save elseif Clicked(load&) enable 0,"Laden..." Clearlist liste& Clearlist l2& load elseif Clicked(fldr&) ordner endif endwhile MI_MediaInfoA_Delete(handle&) FreeDLL dll& progend
-
Deutlich verbesserte Version, aber immer noch schmucklos. Ist halt funktional.
Code
Alles anzeigen$H D:\XProfan\XProfan\INCLUDE\windows.ph Def $Ver "1.3" declare spl%,cb&,liste&,l2&,neu&,suche&,ende%,ende&,dll&,handle&,log%,save&,load&,txt&,fldr&,ordnr&,del&,suche$,st&,foc%,tl&,fn$,m$,n$,m& proc AddFilStr Parameters p$ AddString(liste&,p$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endproc proc loadordner Parameters r& declare o$,o&,p$ Clearlist r& o$=$ProgDir+"ordner.txt" if FileExists(o$) if FileSize(o$)>0 o&=Assign(o$) Reset #o& whilenot EOF(#o&) Input #o&,p$ AddString(r&,p$) endwhile Close #o& Assign #o&,"" endif endif endproc proc ordner declare w&,l&,a&,d&,o&,e&,e%,o$,h&,t$ w&=Create("Dialog",%hWnd,"Ordner verwalten",600,300,416,400) l&=Create("Listbox",w&,1,8,8,284,352) a&=Create("Button",w&,"Hinzufügen",300,8,96,24) d&=Create("Button",w&,"Löschen",300,40,96,24) o&=Create("Button",w&,"Speichern",300,304,96,24) e&=Create("Button",w&,"Abbrechen",300,336,96,24) loadordner l& whilenot e% EnableWindow d&,GetCurSel(l&)<>-1 waitinput if Clicked(a&) o$=ChooseDir$("Verzeichnis wählen:") case o$<>"":AddString(l&,o$) elseif Clicked(d&) DeleteString(l&,GetCurSel(l&)) elseif Clicked(o&) h&=Assign($ProgDir+"Ordner.txt") Rewrite #h& whileloop 0,GetCount(l&)-1 t$=GetString$(l&,&Loop) case t$<>"":Print #h&,t$ endwhile Close #h& Assign #h&,"" Inc e% elseif Clicked(e&) Inc e% endif endwhile loadordner ordnr& DestroyWindow(w&) endproc proc ConvertBytes$ Parameters d! declare r$ log%=0 while d!>1024 d!=d!/1024 Inc log% endwhile r$=Str$(d!) r$=Left$(r$,InStr(".",r$)+2) Return r$ endproc proc getinfo Parameters p$,info$,section$,cut$ if section$<>"" p$=Del$(p$,1,Instr(section$+"\n",p$)) endif p$=Del$(p$,1,InStr(info$,p$)) p$=Del$(p$,1,InStr(":",p$)+1) p$=Left$(p$,InStr("\n",p$)) p$=Trim$(p$) case cut$<>"":p$=Translate$(p$,cut$,"") Return p$ endproc Proc Search declare s$,fold&,d$,p$,f$,t$,tick& Clearlist liste& Clearlist l2& Clearlist tl& whileloop 0,GetCount(ordnr&)-1 fold&=&Loop d$=GetString$(ordnr&,fold&) if DirExists(d$) s$=FindFirst$(d$+"*.*") whilenot %IOResult if FileExists(d$+s$) AddString(tl&,s$+"|"+d$) endif s$=FindNext$() endwhile endif endwhile tick&=&GetTickCount whileloop 0,GetCount(tl&)-1 s$=GetText$(tl&,&Loop,0) d$=GetText$(tl&,&Loop,1) f$=d$+s$ MI_MediaInfoA_Open(handle&,f$) p$=String$(MI_MediaInfoA_Inform(handle&,0),0) t$=s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|"+GetInfo(p$,"Duration")+"|"+GetInfo(p$,"Format","Video")+"|"+Translate$(GetInfo(p$,+"Width","Video","pixels")+"*"+GetInfo(p$,"Height","Video","pixels")," ","")+"|"+GetInfo(p$,"Bit rate ","Video"," ")+"|"+GetInfo(p$,"Format","Audio")+"|"+GetInfo(p$,"Bit rate ","Audio"," ")+"|"+SubStr$(GetInfo(p$,"Channel(s)","Audio"),1," ") AddString(liste&,t$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(t$,spl%,"|"))):AddString(l2&,t$) MI_MediaInfoA_Close(handle&) SetText st&,"Einlesen: Datei "+Str$(Int(&Loop+1))+"/"+Str$(GetCount(tl&))+" ("+Format$("##0.00",100*&Loop/GetCount(tl&))+"%, Restzeit: "+Str$(Int((&GetTickCount-tick&)/(&Loop+1)*(GetCount(tl&)-&Loop-1)/1000))+" Sekunden)" endwhile endproc proc load Parameters f$ declare l&,t$ l&=Assign(f$) Reset #l& Whilenot EOF(#l&) Input #l&,t$ AddFilStr(t$) endwhile Close #l& Assign #l&,"" endproc proc save Parameters f$ declare l&,t$ l&=Assign(f$) Rewrite #l& Whileloop 0,GetCount(liste&)-1 Print #l&,GetString$(liste&,&Loop) endwhile Close #l& Assign #l&,"" endproc proc enable Parameters d%,p$ EnableWindow neu&,(GetCount(ordnr&)<>0) AND d% EnableWindow fldr&,d% EnableWindow load&,FileExists($ProgDir+"Filmliste.txt") AND d% EnableWindow save&,d% AND GetCount(l2&)<>0 EnableWindow suche&,d% EnableWindow ende&,d% EnableWindow liste&,d% EnableWindow del&,d% AND (GetText$(suche&)<>"") EnableWindow cb&,d% case p$<>"":SetText st&,p$ endproc proc einlesen declare p$ enable 0,"Filter anwenden..." Clearlist l2& whileloop 0,GetCount(liste&)-1 p$=GetString$(liste&,&Loop) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endwhile endproc WindowStyle 282 WindowTitle "Mediathek "+$Ver window 200,100-1492,804 cls ~GetSysColor(15) neu&=Create("Button",%hWnd,"Generieren",8,8,96,24) fldr&=Create("Button",%hWnd,"Ordner",112,8,96,24) load&=Create("Button",%hWnd,"Laden",216,8,96,24) save&=Create("Button",%hWnd,"Speichern",320,8,96,24) Create("Text",%hWnd,"Filter:",424,12,44,24) suche&=Create("Edit",%hWnd,"",596,8,240,24) del&=Create("Button",%hWnd,"X",836,8,24,24) cb&=Create("ChoiceBox",%hWnd,0,468,8,128,200) AddString(cb&,"Dateiname") AddString(cb&,"Pfad") AddString(cb&,"Dateigröße") AddString(cb&,"Filmlänge") AddString(cb&,"Videocodec") AddString(cb&,"Videoauflösung") AddString(cb&,"Videobitrate") AddString(cb&,"Audiocodec") AddString(cb&,"Audiobitrate") AddString(cb&,"Anzahl Kanäle") sendmessage(cb&,$14E,0,0) spl%=1 ende&=Create("Button",%hWnd,"Beenden",1380,8,96,24) st&=Create("StatusWindow",%hWnd,"Laden...") ordnr&=Create("List",1) loadordner ordnr& liste&=Create("Grid",GetCount(cb&),1) tl&=Create("Grid",2,1) l2&=Create("Gridbox",%hWnd,"Dateiname;0;500;Pfad;0;200;Größe;1;80;Länge;1;72;Codec;0;100;Auflösung;0;80;Bitrate;1;72;Audiocodec;0;100;Bitrate;1;72;Kanäle;2;56",0,8,40,1468,700) enable 0 dll&=Importdll($ProgDir+"MediaInfo.dll","MI_") handle&=MI_MediaInfoA_New() Usermessages 16 fn$=$ProgDir+"autoload.mil" if %PCount>1 case FileExists(Par$(1)):fn$=Par$(1) endif case FileExists(fn$):load fn$ whilenot ende% enable 1,"Bereit...("+Str$(GetCount(l2&))+" Ergebnisse)" case foc%:SetFocus(suche&) waitinput foc%=GetFocus(suche&) spl%=GetCurSel(cb&)+1 if GetFocus(l2&) AND (%LastMessage=515) m$=GetText$(l2&,GetCurSel(l2&),1)+GetText$(l2&,GetCurSel(l2&),0) if FileExists(m$) MI_MediaInfoA_Open(handle&,m$) n$=String$(MI_MediaInfoA_Inform(handle&,0),0) Messagebox(n$,m$,0) MI_MediaInfoA_Close(handle&) else Messagebox("Zusammenfassung kann nicht angezeigt werden, da die Datei nicht verfügbar ist.","Zusammenfassung nicht möglich",16) endif elseif Clicked(ende&) OR (%UMessage=16) OR MenuItem(4000) Inc ende% elseif Clicked(del&) SetText suche&,"" suche$="" einlesen Inc foc% elseif GetFocus(suche&) if suche$<>GetText$(suche&) suche$=GetText$(suche&) einlesen endif elseif Clicked(neu&) enable 0,"Einlesen..." Search elseif Clicked(save&) fn$=SaveFile$(%hWnd,"Speichern","MediaInfo-Listen|*.mil|Alle Dateien|*.*",1) if fn$<>"" enable 0,"Speichern..." save fn$ endif elseif Clicked(load&) fn$=LoadFile$(%hWnd,"Datei laden","MediaInfo-Listen|*.mil|Alle Dateien|*.*") if FileExists(fn$) enable 0,"Laden..." Clearlist liste& Clearlist l2& load fn$ endif elseif Clicked(fldr&) ordner endif endwhile MI_MediaInfoA_Delete(handle&) FreeDLL dll& progend
-
Deutlich einfacher wirds natürlich, wenn ich die Informationen gezielt auslesen kann und mich nicht durch die entstehende riesige "Textdatei" wühlen muss.
Dazu gibt's die Funktion "Get". Kann mir irgendjemand helfen, wie ich die einsetzen muss? Ich hab schon einiges rausgefunden, aber es stürzt wieder mal ab.
An die Funktion werden diverse Parameter übergeben, die angeben was ausgelesen wird (siehe Header-Datei, wie in XProfan). Aber so richtig werde ich nicht schlau draus.Edit: Ah Mist, ich glaube ich muss noch so einen hässlichen Buffer erzeugen...
-
Mittels MediaInfo_Count_Get(handle,parameter,-1) lässt sich die Anzahl der jeweiligen Streams ermitteln, wobei "parameter" folgendes sein kann:
0 = Stream_General
1 = Stream_Video
2 = Stream_Audio
3 = Stream_Text
4 = Stream_Other
5 = Stream_Image
6 = Stream_Menu
7 = Stream_MaxLeider hilft mir das auch noch nicht so richtig weiter. Gut, ich kann jetzt die Anzahl der jeweiligen Streams ermitteln, aber immer noch nicht einzelne Parameter.
-
Also wenn sich noch jemand findet, der mir helfen kann, das wäre echt super. Ich suche immer noch eine Möglichkeit einzelen Informationen per "GET" auszulesen.
-
Version 1.5, hauptsächlich Fehlerbehebungen und eine rudimentäre Abfrage, ob die zu bearbeitende Datei überhaupt ein Film ist.
Code
Alles anzeigen$H D:\XProfan\XProfan\INCLUDE\windows.ph Def $Ver "1.5" declare spl%,cb&,liste&,l2&,neu&,suche&,ende%,ende&,dll&,handle&,log%,save&,load&,txt&,fldr&,ordnr&,del&,suche$,st&,foc%,tl&,fn$,m$,n$,m& proc AddFilStr Parameters p$ AddString(liste&,p$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endproc proc loadordner Parameters r& declare o$,o&,p$ Clearlist r& o$=$ProgDir+"ordner.txt" if FileExists(o$) if FileSize(o$)>0 o&=Assign(o$) Reset #o& whilenot EOF(#o&) Input #o&,p$ AddString(r&,p$) endwhile Close #o& Assign #o&,"" endif endif endproc proc ordner declare w&,l&,a&,d&,o&,e&,e%,o$,h&,t$ w&=Create("Dialog",%hWnd,"Ordner verwalten",600,300,416,400) l&=Create("Listbox",w&,1,8,8,284,352) a&=Create("Button",w&,"Hinzufügen",300,8,96,24) d&=Create("Button",w&,"Löschen",300,40,96,24) o&=Create("Button",w&,"Speichern",300,304,96,24) e&=Create("Button",w&,"Abbrechen",300,336,96,24) loadordner l& whilenot e% EnableWindow d&,GetCurSel(l&)<>-1 waitinput if Clicked(a&) o$=ChooseDir$("Verzeichnis wählen:") case o$<>"":AddString(l&,o$) elseif Clicked(d&) DeleteString(l&,GetCurSel(l&)) elseif Clicked(o&) h&=Assign($ProgDir+"Ordner.txt") Rewrite #h& whileloop 0,GetCount(l&)-1 t$=GetString$(l&,&Loop) case t$<>"":Print #h&,t$ endwhile Close #h& Assign #h&,"" Inc e% elseif Clicked(e&) Inc e% endif endwhile loadordner ordnr& DestroyWindow(w&) endproc proc ConvertBytes$ Parameters d! declare r$ log%=0 while d!>1024 d!=d!/1024 Inc log% endwhile r$=Str$(d!) r$=Left$(r$,InStr(".",r$)+2) Return r$ endproc proc getinfo Parameters p$,info$,section$,cut$ if section$<>"" casenot InStr("\n"+section$+"\n",p$):section$=section$+" #1" p$=Del$(p$,1,Instr("\n"+section$+"\n",p$)) endif p$=Del$(p$,1,InStr(info$,p$)) p$=Del$(p$,1,InStr(":",p$)+1) p$=Trim$(Left$(p$,InStr("\n",p$))) case cut$<>"":p$=Translate$(p$,cut$,"") Return p$ endproc Proc Search declare s$,fold&,d$,p$,f$,t$,tick&,vb$,ab$ Clearlist liste& Clearlist l2& Clearlist tl& whileloop 0,GetCount(ordnr&)-1 fold&=&Loop d$=GetString$(ordnr&,fold&) if DirExists(d$) s$=FindFirst$(d$+"*.*") whilenot %IOResult if FileExists(d$+s$) AddString(tl&,s$+"|"+d$) endif s$=FindNext$() endwhile endif endwhile tick&=&GetTickCount whileloop 0,GetCount(tl&)-1 s$=GetText$(tl&,&Loop,0) d$=GetText$(tl&,&Loop,1) f$=d$+s$ MI_MediaInfoA_Open(handle&,f$) p$=String$(MI_MediaInfoA_Inform(handle&,0),0) ifnot vc% t$=s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|N/A|N/A|N/A|N/A|N/A|N/A|N/A" else vb$=GetInfo(p$,"it rate ","Video"," ",vc%) casenot InStr("/s",vb$):vb$="N/A" ab$=GetInfo(p$,"Bit rate ","Audio"," ",ac%) casenot InStr("/s",ab$):ab$="N/A" t$=s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|"+GetInfo(p$,"Duration")+"|"+GetInfo(p$,"Format","Video","")+"|"+Translate$(GetInfo(p$,+"Width","Video","pixels")+"*"+GetInfo(p$,"Height","Video","pixels")," ","")+"|"+vb$+"|"+GetInfo(p$,"Format","Audio","")+"|"+ab$+"|"+SubStr$(GetInfo(p$,"Channel(s)","Audio",""),1," ") endif AddString(liste&,t$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(t$,spl%,"|"))):AddString(l2&,t$) MI_MediaInfoA_Close(handle&) SetText st&,"Einlesen: Datei "+Str$(Int(&Loop+1))+"/"+Str$(GetCount(tl&))+" ("+Format$("##0.00",100*&Loop/GetCount(tl&))+"%, Restzeit: "+Str$(Int((&GetTickCount-tick&)/(&Loop+1)*(GetCount(tl&)-&Loop-1)/1000))+" Sekunden)" endwhile endproc proc load Parameters f$ declare l&,t$ l&=Assign(f$) Reset #l& Whilenot EOF(#l&) Input #l&,t$ AddFilStr(t$) endwhile Close #l& Assign #l&,"" endproc proc save Parameters f$ declare l&,t$ l&=Assign(f$) Rewrite #l& Whileloop 0,GetCount(liste&)-1 Print #l&,GetString$(liste&,&Loop) endwhile Close #l& Assign #l&,"" endproc proc enable Parameters d%,p$ EnableWindow neu&,(GetCount(ordnr&)<>0) AND d% EnableWindow fldr&,d% EnableWindow load&,FileExists($ProgDir+"Filmliste.txt") AND d% EnableWindow save&,d% AND GetCount(l2&)<>0 EnableWindow suche&,d% EnableWindow ende&,d% EnableWindow liste&,d% EnableWindow del&,d% AND (GetText$(suche&)<>"") EnableWindow cb&,d% case p$<>"":SetText st&,p$ endproc proc einlesen declare p$ enable 0,"Filter anwenden..." Clearlist l2& whileloop 0,GetCount(liste&)-1 p$=GetString$(liste&,&Loop) case (suche$="") OR InStr(suche$,Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endwhile endproc subclassproc if Subclassmessage(l2&,515) m$=GetText$(l2&,GetCurSel(l2&),1)+GetText$(l2&,GetCurSel(l2&),0) if FileExists(m$) MI_MediaInfoA_Open(handle&,m$) n$=String$(MI_MediaInfoA_Inform(handle&,0),0) Messagebox(n$,m$,0) MI_MediaInfoA_Close(handle&) else Messagebox("Zusammenfassung kann nicht angezeigt werden, da die Datei nicht verfügbar ist.","Zusammenfassung nicht möglich",16) endif Set("WinProc",0) endif endproc WindowStyle 282 WindowTitle "Mediathek "+$Ver window 200,100-1492,804 cls ~GetSysColor(15) neu&=Create("Button",%hWnd,"Generieren",8,8,96,24) fldr&=Create("Button",%hWnd,"Ordner",112,8,96,24) load&=Create("Button",%hWnd,"Laden",216,8,96,24) save&=Create("Button",%hWnd,"Speichern",320,8,96,24) Create("Text",%hWnd,"Filter:",424,12,44,24) suche&=Create("Edit",%hWnd,"",596,8,240,24) del&=Create("Button",%hWnd,"X",836,8,24,24) cb&=Create("ChoiceBox",%hWnd,0,468,8,128,200) AddString(cb&,"Dateiname") AddString(cb&,"Pfad") AddString(cb&,"Dateigröße") AddString(cb&,"Filmlänge") AddString(cb&,"Videocodec") AddString(cb&,"Videoauflösung") AddString(cb&,"Videobitrate") AddString(cb&,"Audiocodec") AddString(cb&,"Audiobitrate") AddString(cb&,"Anzahl Kanäle") sendmessage(cb&,$14E,0,0) spl%=1 ende&=Create("Button",%hWnd,"Beenden",1380,8,96,24) st&=Create("StatusWindow",%hWnd,"Laden...") ordnr&=Create("List",1) loadordner ordnr& liste&=Create("Grid",GetCount(cb&),1) tl&=Create("Grid",2,1) l2&=Create("Gridbox",%hWnd,"Dateiname;0;500;Pfad;0;200;Größe;1;80;Länge;1;72;Codec;0;100;Auflösung;0;80;Bitrate;1;72;Audiocodec;0;100;Bitrate;1;72;Kanäle;2;56",0,8,40,1468,700) enable 0 UserMessages 16 dll&=Importdll($ProgDir+"MediaInfo.dll","MI_") handle&=MI_MediaInfoA_New() fn$=$ProgDir+"autoload.mil" if %PCount>1 case FileExists(Par$(1)):fn$=Par$(1) endif case FileExists(fn$):load fn$ SubClass l2&,1 whilenot ende% enable 1,"Bereit...("+Str$(GetCount(l2&))+" Ergebnisse)" case foc%:SetFocus(suche&) waitinput foc%=GetFocus(suche&) spl%=GetCurSel(cb&)+1 if Clicked(ende&) OR (%UMessage=16) OR MenuItem(4000) Inc ende% elseif Clicked(del&) SetText suche&,"" suche$="" einlesen Inc foc% sendmessage(suche&,$B9,0,0) elseif sendmessage(suche&,$B8,0,0) suche$=Lower$(GetText$(suche&)) einlesen sendmessage(suche&,$B9,0,0) elseif Clicked(neu&) enable 0,"Einlesen..." Search elseif Clicked(save&) fn$=SaveFile$(%hWnd,"Speichern","MediaInfo-Listen|*.mil|Alle Dateien|*.*",1) if fn$<>"" enable 0,"Speichern..." save fn$ endif elseif Clicked(load&) fn$=LoadFile$(%hWnd,"Datei laden","MediaInfo-Listen|*.mil|Alle Dateien|*.*") if FileExists(fn$) enable 0,"Laden..." Clearlist liste& Clearlist l2& load fn$ endif elseif Clicked(fldr&) ordner endif endwhile SubClass l2&,0 SubClass %hWnd,0 MI_MediaInfoA_Delete(handle&) FreeDLL dll& progend
-
Da ich hier keine Beiträge bearbeiten kann: Kleines Update, es hatten sich einige Relikte eingeschlichen.
Code
Alles anzeigen$H D:\XProfan\XProfan\INCLUDE\windows.ph Def $Ver "1.5.1" declare spl%,cb&,liste&,l2&,neu&,suche&,ende%,ende&,dll&,handle&,log%,save&,load&,txt&,fldr&,ordnr&,del&,suche$,st&,foc%,tl&,fn$,m$,n$,m&,hilf% proc AddFilStr Parameters p$ AddString(liste&,p$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endproc proc loadordner Parameters r& declare o$,o&,p$ Clearlist r& o$=$ProgDir+"ordner.txt" if FileExists(o$) if FileSize(o$)>0 o&=Assign(o$) Reset #o& whilenot EOF(#o&) Input #o&,p$ AddString(r&,p$) endwhile Close #o& Assign #o&,"" endif endif endproc proc ordner declare w&,l&,a&,d&,o&,e&,e%,o$,h&,t$ w&=Create("Dialog",%hWnd,"Ordner verwalten",600,300,416,400) l&=Create("Listbox",w&,1,8,8,284,352) a&=Create("Button",w&,"Hinzufügen",300,8,96,24) d&=Create("Button",w&,"Löschen",300,40,96,24) o&=Create("Button",w&,"Speichern",300,304,96,24) e&=Create("Button",w&,"Abbrechen",300,336,96,24) loadordner l& whilenot e% EnableWindow d&,GetCurSel(l&)<>-1 waitinput if Clicked(a&) o$=ChooseDir$("Verzeichnis wählen:") case o$<>"":AddString(l&,o$) elseif Clicked(d&) DeleteString(l&,GetCurSel(l&)) elseif Clicked(o&) h&=Assign($ProgDir+"Ordner.txt") Rewrite #h& whileloop 0,GetCount(l&)-1 t$=GetString$(l&,&Loop) case t$<>"":Print #h&,t$ endwhile Close #h& Assign #h&,"" Inc e% elseif Clicked(e&) Inc e% endif endwhile loadordner ordnr& DestroyWindow(w&) endproc proc ConvertBytes$ Parameters d! declare r$ log%=0 while d!>1024 d!=d!/1024 Inc log% endwhile r$=Str$(d!) r$=Left$(r$,InStr(".",r$)+2) Return r$ endproc proc getinfo Parameters p$,info$,section$,cut$ if section$<>"" casenot InStr("\n"+section$+"\n",p$):section$=section$+" #1" casenot InStr("\n"+section$+"\n",p$):Return "N/A" p$=Del$(p$,1,Instr("\n"+section$+"\n",p$)) endif p$=Del$(p$,1,InStr(info$,p$)) p$=Del$(p$,1,InStr(":",p$)+1) p$=Trim$(Left$(p$,InStr("\n",p$))) case cut$<>"":p$=Translate$(p$,cut$,"") Return p$ endproc Proc Search declare s$,fold&,d$,p$,f$,t$,tick&,vb$,ab$ Clearlist liste& Clearlist l2& Clearlist tl& whileloop 0,GetCount(ordnr&)-1 fold&=&Loop d$=GetString$(ordnr&,fold&) if DirExists(d$) s$=FindFirst$(d$+"*.*") whilenot %IOResult if FileExists(d$+s$) AddString(tl&,s$+"|"+d$) endif s$=FindNext$() endwhile endif endwhile tick&=&GetTickCount whileloop 0,GetCount(tl&)-1 s$=GetText$(tl&,&Loop,0) d$=GetText$(tl&,&Loop,1) f$=d$+s$ MI_MediaInfoA_Open(handle&,f$) p$=String$(MI_MediaInfoA_Inform(handle&,0),0) ifnot InStr("\nVideo\n",p$) t$=s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|N/A|N/A|N/A|N/A|N/A|N/A|N/A" else vb$=GetInfo(p$,"it rate ","Video"," ") casenot InStr("/s",vb$):vb$="N/A" ab$=GetInfo(p$,"Bit rate ","Audio"," ") casenot InStr("/s",ab$):ab$="N/A" t$=s$+"|"+d$+"|"+ConvertBytes$(FileSize(f$))+" "+Mid$("kMG",log%,1)+"B"+"|"+GetInfo(p$,"Duration")+"|"+GetInfo(p$,"Format","Video","")+"|"+Translate$(GetInfo(p$,+"Width","Video","pixels")+"*"+GetInfo(p$,"Height","Video","pixels")," ","")+"|"+vb$+"|"+GetInfo(p$,"Format","Audio","")+"|"+ab$+"|"+SubStr$(GetInfo(p$,"Channel(s)","Audio",""),1," ") endif AddString(liste&,t$) case (suche$="") OR InStr(Lower$(suche$),Lower$(SubStr$(t$,spl%,"|"))):AddString(l2&,t$) MI_MediaInfoA_Close(handle&) SetText st&,"Einlesen: Datei "+Str$(Int(&Loop+1))+"/"+Str$(GetCount(tl&))+" ("+Format$("##0.00",100*&Loop/GetCount(tl&))+"%, Restzeit: "+Str$(Int((&GetTickCount-tick&)/(&Loop+1)*(GetCount(tl&)-&Loop-1)/1000))+" Sekunden)" endwhile endproc proc load Parameters f$ declare l&,t$ l&=Assign(f$) Reset #l& Whilenot EOF(#l&) Input #l&,t$ AddFilStr(t$) endwhile Close #l& Assign #l&,"" endproc proc save Parameters f$ declare l&,t$ l&=Assign(f$) Rewrite #l& Whileloop 0,GetCount(liste&)-1 Print #l&,GetString$(liste&,&Loop) endwhile Close #l& Assign #l&,"" endproc proc enable Parameters d%,p$ EnableWindow neu&,(GetCount(ordnr&)<>0) AND d% EnableWindow fldr&,d% EnableWindow load&,FileExists($ProgDir+"Filmliste.txt") AND d% EnableWindow save&,d% AND GetCount(l2&)<>0 EnableWindow suche&,d% EnableWindow ende&,d% EnableWindow liste&,d% EnableWindow del&,d% AND (GetText$(suche&)<>"") EnableWindow cb&,d% case p$<>"":SetText st&,p$ endproc proc einlesen declare p$ enable 0,"Filter anwenden..." Clearlist l2& whileloop 0,GetCount(liste&)-1 p$=GetString$(liste&,&Loop) case (suche$="") OR InStr(suche$,Lower$(SubStr$(p$,spl%,"|"))):AddString(l2&,p$) endwhile endproc subclassproc if Subclassmessage(l2&,515) m$=GetText$(l2&,GetCurSel(l2&),1)+GetText$(l2&,GetCurSel(l2&),0) if FileExists(m$) MI_MediaInfoA_Open(handle&,m$) n$=String$(MI_MediaInfoA_Inform(handle&,0),0) MI_MediaInfoA_Close(handle&) Messagebox(n$,m$,0) else Messagebox("Zusammenfassung kann nicht angezeigt werden, da die Datei nicht verfügbar ist.","Zusammenfassung nicht möglich",16) endif Set("WinProc",0) endif endproc WindowStyle 282 WindowTitle "Mediathek "+$Ver window 200,100-1492,804 cls ~GetSysColor(15) neu&=Create("Button",%hWnd,"Generieren",8,8,96,24) fldr&=Create("Button",%hWnd,"Ordner",112,8,96,24) load&=Create("Button",%hWnd,"Laden",216,8,96,24) save&=Create("Button",%hWnd,"Speichern",320,8,96,24) Create("Text",%hWnd,"Filter:",424,12,44,24) suche&=Create("Edit",%hWnd,"",596,8,240,24) del&=Create("Button",%hWnd,"X",836,8,24,24) cb&=Create("ChoiceBox",%hWnd,0,468,8,128,200) AddString(cb&,"Dateiname") AddString(cb&,"Pfad") AddString(cb&,"Dateigröße") AddString(cb&,"Filmlänge") AddString(cb&,"Videocodec") AddString(cb&,"Videoauflösung") AddString(cb&,"Videobitrate") AddString(cb&,"Audiocodec") AddString(cb&,"Audiobitrate") AddString(cb&,"Anzahl Kanäle") sendmessage(cb&,$14E,0,0) spl%=1 ende&=Create("Button",%hWnd,"Beenden",1380,8,96,24) st&=Create("StatusWindow",%hWnd,"Laden...") ordnr&=Create("List",1) loadordner ordnr& liste&=Create("Grid",GetCount(cb&),1) tl&=Create("Grid",2,1) l2&=Create("Gridbox",%hWnd,"Dateiname;0;500;Pfad;0;200;Größe;1;80;Länge;1;72;Codec;0;100;Auflösung;0;80;Bitrate;1;72;Audiocodec;0;100;Bitrate;1;72;Kanäle;2;56",0,8,40,1468,700) enable 0 UserMessages 16 dll&=Importdll($ProgDir+"MediaInfo.dll","MI_") handle&=MI_MediaInfoA_New() fn$=$ProgDir+"autoload.mil" if %PCount>1 case FileExists(Par$(1)):fn$=Par$(1) endif case FileExists(fn$):load fn$ SubClass l2&,1 whilenot ende% enable 1,"Bereit...("+Str$(GetCount(l2&))+" Ergebnisse)" case foc%:SetFocus(suche&) Clear hilf% waitinput foc%=GetFocus(suche&) spl%=GetCurSel(cb&)+1 if Clicked(ende&) OR (%UMessage=16) OR MenuItem(4000) Inc ende% elseif Clicked(del&) SetText suche&,"" suche$="" einlesen Inc foc% sendmessage(suche&,$B9,0,0) elseif sendmessage(suche&,$B8,0,0) suche$=Lower$(GetText$(suche&)) einlesen sendmessage(suche&,$B9,0,0) elseif Clicked(neu&) enable 0,"Einlesen..." Search elseif Clicked(save&) fn$=SaveFile$(%hWnd,"Speichern","MediaInfo-Listen|*.mil|Alle Dateien|*.*",1) if fn$<>"" enable 0,"Speichern..." save fn$ endif elseif Clicked(load&) fn$=LoadFile$(%hWnd,"Datei laden","MediaInfo-Listen|*.mil|Alle Dateien|*.*") if FileExists(fn$) enable 0,"Laden..." Clearlist liste& Clearlist l2& load fn$ endif elseif Clicked(fldr&) ordner endif endwhile SubClass l2&,0 SubClass %hWnd,0 MI_MediaInfoA_Delete(handle&) FreeDLL dll& progend
-
Version 1.7 (Rechtsklick-Menü, Fenster größenveränderbar, wennd as Fenster minimiert wird kann es wieder vergößert werden).
Leider ist der Quelltext zu groß um ihn hier hochzuladen. Kann ich irgendwie Zips anhängen oder so?
-
Dateianhänge funktionieren hier nicht. Du kannst die Datei bei Workupload hochladen und den Link hier posten.
Gruß Volkmar
-
Dateianhänge funktionieren hier nicht. Du kannst die Datei bei Workupload hochladen und den Link hier posten.
Gruß Volkmar
Oh ok. Womit verdienen die ihr Geld? Kostenloser Service ohne Anmeldung macht mich immer skeptisch.
-
Und die Mehrheit will sich nirgendwo anmelden Du kannst ja auch einen anderen Dienst verwenden, wo Du hier einen Link posten kannst. Oder wenn der Quelltext nicht zu lang ist, auch auf 2 Beiträge aufteilen. Das war jetzt nur der Standardvorschlag, der auch immer im Virenbereich für Logs gegeben wird, wenn die zu lang sind.
Gruß Volkmar
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!