Hello,
Je joue de la vidéo via MCI avec le code suivant :
mciSendString_("OPEN myfile TYPE MPEGVIDEO ALIAS MCI_0", 0, 0, 0)
mciSendString_("PLAY MCI_0", 0, 0, 0)
Savez-vous comment désactiver l'Overlay ?
Video Playback via MCI sans Overlay
Code pour capturer des vidéos ( désactive / réactive automatiquement l'overlay )
Codé en PB 3.94 / Droopy Lib 1.31
La partie MCI a été piquée sur le forum.
Voilà la version compilée : File:1->MCI-SnapShot.exe

Codé en PB 3.94 / Droopy Lib 1.31
La partie MCI a été piquée sur le forum.
Voilà la version compilée : File:1->MCI-SnapShot.exe

Code : Tout sélectionner
;/ PureBasic 3.94 / Droopy Lib 1.31
;/ Pour les FLV necessite le splitter FLV ( Copier FLVSplitter.ax dans C:\Windows\system32 + regsvr32 FLVSplitter.ax )
;{/ MCI Constantes & Commandes
Enumeration 0
#MCI_Unknown
#MCI_Stopped
#MCI_Playing
#MCI_Paused
EndEnumeration
Enumeration
#Forward
#Backward
EndEnumeration
; Commandes d'état de la vidéo
Procedure MCI_GetStatus(Nb) ; Renvoie l'état de la vidéo: En pause, en lecture, ou stoppée
Result=#MCI_Unknown
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" mode",@a$,#MAX_PATH,0)
If i=0
Select a$
Case "stopped":Result=#MCI_Stopped
Case "playing":Result=#MCI_Playing
Case "paused":Result=#MCI_Paused
EndSelect
EndIf
ProcedureReturn Result
EndProcedure
Procedure MCI_GetSpeed(Nb) ; Renvoie la vitesse de lecture
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" Speed",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetLength(Nb) ; Renvoie la longueur de la vidéo
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" length",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetPosition(Nb) ; Renvoie la position du film
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" position",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetVolume(Nb) ; Renvoie le volume
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" volume",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure.s MCI_GetRect(Nb) ; Renvoie la taille du film
a$=Space(#MAX_PATH)
i=mciSendString_("where MCI_"+Str(Nb)+" source",@a$,#MAX_PATH,0)
ProcedureReturn StringField(a$,3," ")+" "+StringField(a$,4," ")
EndProcedure
Procedure MCI_GetHandle(Nb) ; Renvoie le handle de la fenêtre d'affichage
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" window handle",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
; Commandes de contrôle de la vidéo
Procedure MCI_Load(Nb,file.s)
i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MCI_"+Str(Nb),0,0,0)
If i=0
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure MCI_Play(Nb)
i=mciSendString_("play MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_PlayStart(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(0),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_PlayPart(Nb,start,endPos)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(start)+" to "+Str(endPos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Pause(Nb)
i=mciSendString_("pause MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Resume(Nb)
i=mciSendString_("resume MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Stop(Nb)
i=mciSendString_("stop MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Free(Nb)
i=mciSendString_("close MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetVolume(Nb,volume)
i=mciSendString_("SetAudio MCI_"+Str(Nb)+" volume to "+Str(volume),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetSpeed(Nb,Tempo)
i=mciSendString_("set MCI_"+Str(Nb)+" Speed "+Str(Tempo),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetTimeMSFormat(Nb)
i=mciSendString_("set MCI_"+Str(Nb)+" time format milliseconds",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetCaption(Nb, Caption$)
i=mciSendString_("Window MCI_"+Str(Nb)+" text "+Chr(34)+Caption$+Chr(34),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Seek(Nb,pos)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to "+Str(pos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekToStart(Nb)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to start",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekToEnd(Nb)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to end",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekTo(Nb, pos)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(pos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Parent(Nb, Hnd)
i=mciSendString_("Window MCI_"+Str(Nb)+" handle "+Str(Hnd),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Full(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" fullscreen ",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Restore(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" window ",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Step(Nb,NumFrames,Dir)
If Dir = #Forward ; en avant
i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames),0,0,0)
ElseIf Dir = #Backward ; en arrière
i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames)+" reverse",0,0,0)
EndIf
ProcedureReturn i
EndProcedure
Procedure.s MCI_TimeString(time)
time/1000
sek=time%60:time/60
min=time%60:time/60
ProcedureReturn RSet(Str(time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(sek),2,"0")
EndProcedure
Procedure MCI_ShowWindow(Nb)
i=mciSendString_("Window MCI_"+Str(Nb)+" state show ",0,0,0)
ProcedureReturn i
EndProcedure
;}
Procedure EnableOverlay(state.l)
;/ 1° Trouver la position de la carte video
Carte.s=RegGetValue("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO","\Device\Video0",".")
;/ Trouve ou taper pour la carte
Cle.s=ReplaceString(Carte,"\Registry\Machine","HKEY_LOCAL_MACHINE")
;/ 3 Ecrit la valeur
If state
RegDeleteValue(Cle,"Acceleration.Level",".")
Else
RegSetValue(Cle,"Acceleration.Level","5",#REG_DWORD,".")
EndIf
;/ 4 Let Windows reload the display settings by using the following code:
DEVMODE.DEVMODE
success=EnumDisplaySettings_(#Null,-1,DEVMODE)
If success
ret=ChangeDisplaySettings_(DEVMODE,1073741824) ; 0 = Succès
EndIf
If ret =0
ProcedureReturn 1
EndIf
EndProcedure
Enumeration
#Track
#Bouton
#Status
#Play
EndEnumeration
UseJPEGImageDecoder()
UseJPEGImageEncoder()
Movie.s = OpenFileRequester("Choose the movie to play", "D:\9Go Seagate\MP3\", "*.*", 0)
If Movie=""
End
EndIf
ImageSauvegardee.s=Movie+".jpg"
EnableOverlay(#False)
If MCI_Load(0,Movie)=#False
MessageRequester("Erreur","Pas une vidéo !")
End
EndIf
MCI_Play(0)
Longueur=MCI_GetLength(0)
temp.s=MCI_GetRect(0)
Largeur=Val(StringField(temp,1," "))
hauteur=Val(StringField(temp,2," "))
hid=OpenWindow(0,0,0,Largeur,hauteur*2+70,#PB_Window_SystemMenu|#PB_Window_ScreenCentered ,"PureVideoSnapshot")
CreateGadgetList(WindowID(0))
MCI_Parent(0,hid) ; Positionne la vidéo dans ma fenêtre en tant que fenêtre fille
TrackBarGadget(#Track,10,hauteur+10,Largeur-20,20,0,10000)
ButtonImageGadget(#Bouton,0,hauteur+40,Largeur,hauteur,0)
CreateStatusBar(#Status,WindowID(0))
AddStatusBarField(Largeur/2)
AddStatusBarField(Largeur/2)
Repeat
evt=WindowEvent()
BarBouge=#False
If evt=#PB_Event_Gadget
Select EventGadgetID()
Case #Track
BarBouge=#True
t.f=GetGadgetState(#Track)/10000
t*100
t=Longueur*t/100
MCI_SeekTo(0,t)
Case #Bouton
;/ Capture
CaptureWindow(hid)
SaveCapture(ImageSauvegardee,#PB_ImagePlugin_JPEG,10)
id1=LoadImage(#PB_Any,ImageSauvegardee)
id2=GrabImage(id1,#PB_Any,2,30,Largeur,hauteur)
SetGadgetState(#Bouton,UseImage(id2))
SaveImage(id2,ImageSauvegardee,#PB_ImagePlugin_JPEG,10)
StatusBarText(#Status,1," Shot @"+Str(t))
EndSelect
EndIf
Position=MCI_GetPosition(0)
tt.f=Position/Longueur*100
tt=10000*tt/100
If BarBouge=#False
;/ Calcule et positionne le trackbar
SetGadgetState(#Track,tt)
EndIf
StatusBarText(#Status,0," "+Str(Position)+" / "+Str(Longueur))
sleep_(1)
Until evt = #PB_Event_CloseWindow
CloseWindow(0)
MCI_Free(0)
EnableOverlay(#True)