ist zwar schon länger her die Frage, hab aber mal ein Beispiel gefunden und das in PB umgesetzt. Hab es mit einer wmv getestet und funktioniert auch.
Code: Alles auswählen
;######################################################################################
Global OpenAlias.b = #False
#StdAlias = "TmpAlias"
; ermitteln aller Dateitypen, die mit den MCI-Treibern abgespielt werden sollen
Procedure.s GetMciFileTypes()
Protected result.l = 0
Protected memIndex.l = 0
Protected Retval.s = ""
Protected Buffer.s = Space(255)
Protected FileTypes.s = ""
Protected count.l = 0
; erst mal alle Dateitypen ermitteln
result = GetProfileString_("mci extensions", #Null, "*.*", Buffer, Len(Buffer))
While PeekS(@Buffer + memIndex) <> ""
FileTypes = FileTypes + PeekS(@Buffer + memIndex) + "#"
If PeekS(@Buffer + memIndex) <> ""
count = count + 1
EndIf
memIndex = memIndex + Len(PeekS(@Buffer + memIndex)) + 1
Wend
; jetzt die dazugehörigen Treiber identifizieren
Retval = "Alle Dateien (*.*)" + "|" + "*.*"
For i = 1 To count
Buffer = Space(256)
res = GetProfileString_("mci extensions", StringField(FileTypes,i,"#"), #Null, Buffer, Len(Buffer))
Retval = Retval + "|" + Left(Buffer, res) + " (*." + StringField(FileTypes,i,"#") + ")|" + "*." + StringField(FileTypes,i,"#")
Next
ProcedureReturn Retval
EndProcedure
; ermitteln eines Treibers für einen entsprechenden Dateityp
Procedure.s GetSingleType(Extension.s)
Protected result.l
Protected Buffer.s = Space(255)
result = GetProfileString_("mci extensions", Right(Extension, 3), "NotFound", Buffer, Len(Buffer))
ProcedureReturn Left(Buffer, result)
EndProcedure
; Fehlercode für einen erfolglosen Aufruf ermitteln
Procedure ErrMsg(Errorcode.l)
Protected result.l = 0
Protected Buffer.s = Space(256)
; kein Fehler
If Errorcode <> 0
; Fehler in einer MessageBox ausgeben
result = mciGetErrorString_(Errorcode, Buffer, Len(Buffer))
MessageRequester("Fehler " + Str(Errorcode), Buffer)
EndIf
EndProcedure
; schließen eines MCI-Treibers
Procedure Mci_Close()
If OpenAlias
mciSendString_("close " + #StdAlias, 0, 0, 0)
OpenAlias = #False
EndIf
EndProcedure
; öffnet eine Datei, sofern nicht eine andere noch geöffnet ist
Procedure Mci_Open(FileName.s, Handle.l)
Protected Buffer.s = Space(256)
Protected result.l = 0
If OpenAlias
Mci_Close()
EndIf
OpenAlias = #True
; ermittelt den Dos-Pfadnamen, ist erforderlich weil MCI Treiber Leerstellen als Separator interpretieren
result = GetShortPathName_(FileName, Buffer, Len(Buffer))
FileName = Left(Buffer, result)
; öffnet ein Gerät und eine Multimedia-Datei
ErrMsg(mciSendString_("open " + FileName + " type " + GetSingleType(FileName) + " alias " + #StdAlias, 0, 0, 0))
; falls das Medium ein Video ist, die PictureBox als Anzeige verwenden
mciSendString_("window " + #StdAlias + " handle " + Str(Handle), 0, 0, 0)
; Zeitformat wählen, das wir abfragen wollen
mciSendString_("Set " + #StdAlias + " Time Format Milliseconds", 0, 0, 0)
EndProcedure
; starten der Wiedergabe von Position 0 aus
Procedure Mci_Play()
If OpenAlias
ErrMsg(mciSendString_("play " + #StdAlias + " from 0", 0, 0, 0))
EndIf
EndProcedure
; stoppen der Wiedergabe
Procedure Mci_Stop()
If OpenAlias
mciSendString_("stop " + #StdAlias, 0, 0, 0)
EndIf
EndProcedure
; ermitteln der aktuellen Abspielposition
Procedure.l Mci_GetPos()
Protected Pos.s = Space(256)
If OpenAlias
mciSendString_("status " + #StdAlias + " position", Pos, Len(Pos), 0)
ProcedureReturn Val(Pos) ;, InStr(1, Pos, vbNullChar) - 1)
EndIf
EndProcedure
;######################################################################################
Enumeration
#Fenster
#Btn_laden
#Btn_play
#Btn_stop
#Img_Video
#Zeit
EndEnumeration
#IDTIMER_MAIN = 33
; abfragen der aktuellen Abspielposition
Procedure aktuelle_Zeit()
Protected Seconds.l, Minutes.l, Hours.l
; Millisekunden in ein Stunden:Minuten:Sekunden-Format umrechnen
Seconds = Mci_GetPos() / 1000
Hours = (Seconds - (Seconds % 60)) / 60 / 60
Minutes = (Seconds - (Hours * 60) - (Seconds % 60)) / 60
Seconds = Seconds - (Hours * 60 * 60) - (Minutes * 60)
; Zeitformat im Labelfeld ausgeben
SetGadgetText(#Zeit, RSet(Str(Hours), 2, "0") + ":" + RSet(Str(Minutes), 2, "0") + ":" + RSet(Str(Seconds), 2, "0"))
EndProcedure
Procedure lade_Mediafile(Handle.l)
Protected File$ = OpenFileRequester("Multimediadatei Öffnen", "", GetMciFileTypes(), 0)
Mci_Open(File$, Handle)
EndProcedure
If OpenWindow(#Fenster, 0, 0, 400, 400, "MCI Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenster))
TextGadget(#Zeit, 10, 14, 50, 20, "")
ButtonGadget(#Btn_laden, 60, 10, 100, 20, "öffnen")
ButtonGadget(#Btn_play, 170, 10, 100, 20, "play")
ButtonGadget(#Btn_stop, 280, 10, 100, 20, "stop")
ImageGadget(#Img_Video, 10, 40, 380, 350, #Null)
EndIf
SetTimer_(WindowID(#Fenster), #IDTIMER_MAIN, 500, @aktuelle_Zeit())
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_laden
lade_Mediafile(GadgetID(#Img_Video))
Case #Btn_play
Mci_Play()
Case #Btn_stop
Mci_Stop()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
KillTimer_(WindowID(#Fenster), #IDTIMER_MAIN)
EndIf
Mci_Close()
End