begin process at 2012 02 07 05:36:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimedia

 > MACRO WINDOWS

MACRO WINDOWS


 Information sur la source

Note :
Aucune note
Catégorie :Multimedia Classé sous :macro, capture, vidéo Niveau :Initié Date de création :15/01/2007 Vu / téléchargé :5 524 / 627

Auteur : askil2000

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Ce code sert à enregistrer une vidéo au format AVI (compressé divx), de l'écran de windows (capture d'écran).
Il peut être utile dans le cadre d'une démonstration logiciel, un cour, ou une mémorisation visuel de manip.


 Conclusion

- Il faut installer le composant GLScene pour avirecorder
- Il faut installer des codecs DivX pour la compression vidéo

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip COMBINAISONS DE STRINGS
Source avec Zip Source avec une capture TXT CLASSEMENT PAR ORDRE ALPHABÉTIQUE

 Sources de la même categorie

Source avec Zip LECTURE DU FORMAT EXIF par piette
Source avec Zip Source avec une capture SYNTHÉTISEUR [BASS] par Nicolas___
Source avec Zip Source avec une capture CLAVIER ARRANGEUR MIDI VIRTUEL par etirex
Source avec Zip Source avec une capture KINECT TEST V2 JOUER DE LA MUSIC AVEC KINECT par FFCAST
Source avec Zip CLASSEMENT DES MP3 par piette

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SCREENCAMTURE 0.2 par JulioDelphi
Source avec Zip Source avec une capture WEBCAM À MANIVELLE par Kenavo
Source avec Zip APERCU DES FENETRES REDUITE par le nouveau
Source avec Zip FBPDM LOGICIEL DE PRISE DE MAIN À DISTANCE par fbalien
Source avec Zip Source avec une capture ETEINDRE LE PC A UN MOMENT DONNÉ + CAPTURER L'IMAGE ECRAN ET... par TheBOdybOarDMaN

Commentaires et avis

Commentaire de f0xi le 15/01/2007 18:40:49 administrateur CS

aaah aaah ... trés interressant tout ça .... trés trés interressant ...

je jette un oeuil a la source ...

Commentaire de f0xi le 15/01/2007 19:39:35 administrateur CS



un petit truc tout de suite :

if (Copy(IntToStr(GetKeyState(27)),1,1) = '-') then

mieux serait :

if GetAsyncKeyState(VK_ESCAPE) < 0 then

GetKeyState c'est plutot pour verifier les touches persistante comme Verr.Num, Caps.Lock, Scroll.Lock.

GetAsyncKeyState renvois une valeur inferieur a 0 si la touche est préssée.

on peu meme modifier le programme en faisant :

  repeat
    ImageBureau    := TPicture.Create;
    try
      HandleDCBureau := GetDC(GetDesktopWindow);
      ImageBureau.Bitmap.Width  := Screen.Width;
      ImageBureau.Bitmap.Height := Screen.Height;
      BitBlt(ImageBureau.Bitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, HandleDCBureau, 0, 0, SrcCopy);
      ReleaseDC(GetDesktopWindow, HandleDCBureau);
      if CheckBox1.Checked then
         CaptureCurseurSouris(ImageBureau.Bitmap);
      Bmp := TbitMap.Create;
      try
        Bmp.Width  := 640;
        Bmp.Height := 480;
        ImgStretch(ImageBureau.Bitmap, Bmp, ResampleFilters[6].Filter, ResampleFilters[6].Width);
        AVIRecorder1.AddAVIFrame(Bmp);
      finally
        Bmp.Free;
      end;
    finally
      ImageBureau.Free;
    end;

    Fin := GetAsyncKeyState(VK_ESCAPE) < 0;

    if Fin then begin
       AVIRecorder1.CloseAVIFile;
       ShowWindow(Application.Handle, SW_SHOW);
       Application.Restore;
    end;

    Application.ProcessMessages;
until Fin;

un truc qui serait pas mal serait de mettre le process de capture dans un thread.

par contre pourquoi ImageBureau est de type TPicture plutot que TBitmap ??!
ce serait plus leger de le mettre en TBitmap ce qui pourrait, dans un soucis d'optimisation donner :

  Fin  := False;
  Pass := 0; { integer : compte le nombre de capture effectuées }

  AVIRecorder1.Compressor := acDivX;
  AVIRecorder1.FPS        := 3;
  { il faudrait garder le ratio de l'ecran original sur la taille de la video pour eviter l'ecrasement ou l'etirement de l'image :
    3/2   = 1.500 : 720x480, 1152x768, 1280x854, 1440x960
    4/3   = 1.333 : 320x240, 640x480, 768x576, 800x600, 1024x768, 1280x960, 1400x1050, 1600x1200, 2048x1536
    5/4   = 1.250 : 320x256, 640x512, 1280x1024, 2560x2048
    16/9  = 1.777 : 854x480, 1280x720, 1920x1080
    16/10 = 1.600 : 320x200, 1680x1050, 1920x1200, 2560x1600
  }
  AVIRecorder1.Width      := 640;
  AVIRecorder1.Height     := 480;

  if AVIRecorder1.CreateAVIFile(0) then begin
     ShowMessage('Appuyer sur [Echap] pour Arrêter la macro !');

     Application.Minimize;
     ShowWindow(Application.Handle, SW_HIDE);

     hbwait_ms(1000);

     FrameTemp      := TBitmap.Create;
     try
       FrameTemp.Width    := AVIRecorder1.Width;
       FrameTemp.Height   := AVIRecorder1.Height;
       repeat
         ImageBureau    := TBitmap.Create;
         try
           ImageBureau.Width  := Screen.Width;
           ImageBureau.Height := Screen.Height;
           HandleDCBureau := GetDC(GetDesktopWindow);
           BitBlt(ImageBureau.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, HandleDCBureau, 0, 0, SrcCopy);
           ReleaseDC(GetDesktopWindow, HandleDCBureau);

           if CheckBox1.Checked then
              CaptureCurseurSouris(ImageBureau);

           ImgStretch(ImageBureau, FrameTemp, ResampleFilters[6].Filter, ResampleFilters[6].Width);

           AVIRecorder1.AddAVIFrame(FrameTemp);
         finally
           ImageBureau.Free;
         end;

         Pass := Pass + 1;
         if (Pass mod 3) = 0 then
            Application.ProcessMessages;

         //----
         Fin := (GetAsyncKeyState(VK_ESCAPE) < 0) or (Pass >= $77359400);
         //----

       until Fin;

     finally
       AVIRecorder1.CloseAVIFile;
       FrameTemp.Free;

       ShowWindow(Application.Handle, SW_SHOW);
       Application.Restore;
     end;
  end;

Commentaire de askil2000 le 15/01/2007 21:20:42

:) Salut,

f0xi : Je vois qu'il y a des suggestions interessantes, je vais essayer de regarder tout ça.

en revange pour l'histoire du thread j'aimerais une explication,
car il ne me semble pas necessaire dans mon K.

Merci @ tous !

Commentaire de f0xi le 16/01/2007 13:51:35 administrateur CS

Hi!

en fait le thread serait la pour eviter les appels a ProcessMessages qui ralentissent enormement le programme.
Aprés, c'est vrai, est-ce réellement utile ou non ... aprés tout on s'execute dans le thread principal qui n'a rien d'autre a faire...


sinon pour garder le ratio d'un image c'est simple :
R = W / H
H = W / R
W = H * R


ce qui nous donne comme fonctions :

function GetAspectRatio(const aOriginalWidth, aOriginalHeight : integer) : single;
begin
  result := aOriginalWidth / aOriginalHeight;
end;

function GetWidthByHeight(const aDesiredHeight : integer; const AspectRatio :  single) : integer;
begin
  result := round(aDesiredHeight * AspectRatio);
end;

function GetHeightByWidth(const aDesiredWidth : integer; const AspectRatio : single) : integer;
begin
  result := round(aDesiredWidth / AspectRatio);
end;


var
  AsRt : single  = 640/480;
  OlWd : integer = 640;
  OlHg : integer = 480;
  NwWd : integer = 320;
  NwHg : integer = 240;

{
Edit4 = Origine Width   [Tag = 1]
Edit5 = Origine Height  [Tag = 2]
Edit3 = Aspect Ratio    [Read only]
Edit1 = Desired Width   [Tag = 1]  
Edit2 = Desired Height  [Tag = 2]
}


{ comun a Edit1, Edit2, Edit4, Edit5 }
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9',#08]) then Key := #0;
end;

{ comun a Edit4, Edit5 }
procedure TForm1.Edit4Change(Sender: TObject);
begin
  with (Sender as TEdit) do begin
    case Tag of
      1 : OlWd := StrToIntDef(Text,640);
      2 : OlHg := StrToIntDef(Text,480);
    end;
    AsRt := GetAspectRatio(OlWd,OlHg);
    Edit3.Text := Format('%.8f',[AsRt]);
    NwWd := StrToIntDef(Edit1.Text,320);
    NwHg := StrToIntDef(Edit2.Text,240);
    case Tag of
      1 : NwWd := GetWidthByHeight(NwHg,AsRt);
      2 : NwHg := GetHeightByWidth(NwWd,AsRt);
    end;
    Edit1.Text := IntToStr(NwWd);
    Edit2.Text := IntToStr(NwHg);
  end;
end;

{ comun a Edit1, Edit2 }
procedure TForm1.Edit1Change(Sender: TObject);
begin
  with (Sender as TEdit) do begin
    case Tag of
      1 : begin
            NwWd := StrToIntDef(Edit1.Text,320);
            NwHg := GetHeightByWidth(NwWd,AsRt);
            Edit2.Text := IntToStr(NwHg);
          end;
      2 : begin
            NwHg := StrToIntDef(Edit2.Text,240);
            NwWd := GetWidthByHeight(NwHg,AsRt);
            Edit1.Text := IntToStr(NwWd);
          end;
    end;
  end;
end;



ah, un truc au final qui serait pas mal du tout, serait de mettre l'appli dans la systray a coté de l'horloge...

Commentaire de askil2000 le 16/01/2007 15:13:21

:) salut,

f0xi : je dois dire que tu as une immagination débordante
se qui est plutôt une qualitée chez un développeur, et pour le plaisir de tous je m'en vais adapter ce programme avec un system tray ainsi qu'une adaptation par rapport au ratio.

merci f0xi !

cependant il est clair que ta manière de coder n'est pas la mm que la mienne. je suis curieu de voir comment j'arriverais au mm résultat.

quand j'ai un peu de temps je m'y colle

@+ tlm

ps: pour ceux que sa interesse, le programme fonctionne trés bien sans les modifs c'est juste un soucis d'optimisation.

Commentaire de f0xi le 16/01/2007 23:43:36 administrateur CS

merci bien, si ça peu te servire tant mieux :)

pour ce qui est de ma façon de coder, c'est surtout une methode faignant...
comme par exemple mettre sur qu'une seule ligne les commandes et begin :

if ... then begin
while ... do begin

lors des copier-coller ça vas plus vite ... ^^

aprés ça depend ... c'est un peu chacun sa methode quoi ... comme je tape assé vite, j'hesite pas a en rajouter, je me permet aussi quelque exotisme si c'est possible.
c'est a peu prés entre la technique pure et approuvée et l'experimentation de nouveautées.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

screenshot video [ par Bestdoud ] bonjour,J'arais besoin de faire une dll qui capture une portion du bureau windows ou est jouée une vidéo. Si je fait une capture normale, l'image est Macro Excel [ par selma-elec ] Bonjour à tousPour executer une macro Excel depuis Delphi je je fais :.....ExcelApplication1.Run('MaMacro');.....Pas de problème !!Mais comment fait-o Capture d'un contrôle caché ou invisible [ par phoenyx ] bonjour à tous,j'essaie de faire une procédure pour écrire la documentation de n'importe quelle fiche d'un programme. Donc je parcours Components[], j Dossier macros complémentaires [ par sisi231 ] Bonjour, j'ai créé une macro VBA Excel et je voudrais créer un exécutable d'installation en delphi de cette macro.Je voudrais donc savoir comment trou insérer une vidéo d'intro dans du delphi/opengl [ par n3lio ] Bonjour à tousVoilà la situation : nous travaillons sur un projet de jeu vidéo en delphi/opengl dans le cadre de nos études. Nous voudrions avoir une Capture Video + Audio TWindowsMediaPlayer ? [ par NeO78 ] Salut,Je cherche le moyen de capturer la video et l'audio issues du TWindowsMediaPlayer.J'ai récupérer la source TAviWriter de Forman Créer un flux streaming (pour du live) ! [ par tream6 ] Bonjour,  Je développe actuellement une application avec delphi qui gére plusieurs caméras et une playlist de vidéos. Mon but est de faire un programm Sauvegarde de vidéo [ par cincap ] Bonjour à toutes et à tous,Quand on utilise le code de base pour enregistrer une vidéo de sa webcam, y a t'il un moyen de sauvegarder cette vidéo dans De DCAMAPI.dll à TWAIN ? capture et acces [ par Wavyrn ] Bonjour à tous. Je dois remplacer la caméra dans un programme qui fait de l'analyse scientifique d'images. Et ce n'est pas vraiment évident pour moi. comment inserer un vidéo windows movie maker dans delphi 7 [ par delph7_00 ] salutje veut savoir comment inserer un vidéo windows movie maker dans delphi 7 merci


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,352 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales