Dans ce programme je vous propose d'organiser une capture d'écran où se joue une vidéo quelconque dans le WMplayer .
Par exemple faire une capture d'écran toutes les 3 sec, à concurence de 30images max.(je ne donne que le principe,
vous pouvez étendre à n'importe quelles valeurs).
Si voulez que les images soient jouables en vidéo,il faut un temps de capture de l'ordre de 0.25 s et avec un form+1timer
réglé à 0.25 sec env.,vous pouvez faire défiler les images de manière identique à la vidéo d'origine).
Bien sûr cela peut être étendu à toute activité dans l'écran (animation,tutoriel,...)
Même le son peut être capturé.A ce moment la il faudra rajouter au form en question un soundplayerpour le rendu.
La librairie GpImage est fournie en annexe dans le zip et doit être présente avec le programme.
Le même principe peut être adapté aux différentes formes que peut prendre une capture (zône,fenêtre,cercle,ellipse,presse
papier...GpImage peut réaliser tout cela sans problème.
J'espère que cela vous donnera des idées.
Avec un form on peut faire un travail plus élaboré avec des multi captures (je vous renvoie à l'exemple des fenêtres enfant de
solutions de vfp,leur création et leur mise en cascade,....)
NB:Si vous avez des écrans noirs lors de la capture (même avec la touche Imprime écran) ,voila une astuce pour contourner
ce problème:
1.Ouvrir le WMPlayer et aller au menu outils/options
2.Sélectionner l'onglet performances et cliquer 'options avancées'
3.Décocher 'Utiliser des superpositions'
et vous pourrez capturer sans problème.
Télécharger le zip pour faire fonctionner le programme.
Amicalement.
Code source :
*Capture d'écran: test de capture d'une vidéo jouée au médiaplayer toutes les 3s à concurence de 30 images *Gpimage.prg et GpImage.h doivent être présents.Exécuter le programme depuis son répertoire d'origine.
yrep0=sys(5)+sys(2003)
yMovie=getfile('wmv|mpg|avi') &&vidéo jouable au Wmédiaplayer ifempty(yMovie) return
endi
ymovie='"'+allt(ymovie)+'"' run/n3 "c:\program files\windows media player\wmplayer.exe " &yMovie &&emplacement du wmplayer.exe à confirmer inkey(2)
DeclareLong FindWindow in Win32API String ClassName, String WindowName
lnhandle = FindWindow("Windows madia Player", NULL) ***************** declareinteger BringWindowToTop in Win32API integer lnWnd
= BringWindowToTop(lnHandle ) &&mettre au top de toutes les éventuelles fenêtres pour la capture *******************
oShell=createObject("wscript.shell") &&obtenir le fullscreen (après le stransitionnings du WMPlayer)
oShell.sendKeys("%{ENTER}") inkey(2) &&attendre le fullscreen complet ******************* _screen.windowstate=1
yRepImg= "c:\asupprimer" ifdirectory("c:\asupprimer") &&préparation d'un répertoire des captures+nettoyer set safe off
dele file c:\asupprimer\*.* set safe on else mkdir c:\asupprimer &&&créer
endi
set defa to (yrep0)
ii=0
#include gpImage.h ********************************** dowhile.t.
ii=ii+1 IfNot"gpImage" $ Set("Procedure") SetProcedureTo gpImage Additive EndIf
gdip = CreateObject("gpInit")
img = CreateObject("gpImage")
img.Create(sysmetric(1),sysmetric(2)) &&image vierge aux dimension d'un écran entier
img.Capture(0) &&capture écran entier
w=img.imagewidth
h=img.imageheight if w#800 or h#600
img.resize(800,600) &&redimensionnements à 800*600 px
endi ***************** &&ordonner les captures dans le cas général (pour ne pas intervertir les images et bien conserver leur ordre de capture) docase case ii<=9
jj="000"+allt(str(ii)) case ii>9 and ii<=99
jj="00"+allt(str(ii)) case i>99 and ii<=999
jj="0"+allt(str(ii)) case ii>=1000
jj=allt(str(ii)) endcase *****************
lcDest = yRepImg+"\capture" +jj+"_"+ sys(2015)+ ".jpg"&&représentation unique de l'image
img.saveasJPEG(lcDest,75) &&taux JPEG compression=75% *****************
img=null
gdip=null
t0=seconds() dowhileseconds()-t0<=3 &&1 capture toutes les 3secondes enddo
if ii>=30 &&limite à 30 images exit
endi enddo
*****************************
oShell=createObject("wscript.shell") &&FERMER LE WMPlayer
oShell.sendKeys("%{F4}") ****************************** _screen.windowstate=0 messagebox("Captures terminées-30 photos dans le répertoire "+yrep+" ! Visualisation va suivre !",0+32,"") set defa to c:\asupprimer
gnbre=adir(gabase,"*.jpg") if gnbre>0 DECLAREINTEGER ShellExecute IN shell32.dll ; INTEGER hndWin, STRING cAction, STRING cFileName, ; STRING cParams, STRING cDir, INTEGER nShowWin
aa="c:\asupprimer\"+gabase(1,1) &&faites dérouler les images capturées
ShellExecute(0,"open",aa,"","",1)
endi ************************************ _screen.windowstate=0