En faite je veux faire une capture en temps reel de mon ecran.
La fonction getDesktopWindow affiche du noir lorskil ya une sequence video.
Et je veu afficher le curseur de la souris si possible.
bref une vrai mirroir .
En faite je veux faire une capture en temps reel de mon ecran.
La fonction getDesktopWindow affiche du noir lorskil ya une sequence video.
Et je veu afficher le curseur de la souris si possible.
bref une vrai mirroir .
Solution 1 (vite fait - mal fait)
desactive l'acceleration materielle de ta carte video (Click droit sur le bureau -> proprietes -> parametres -> parametres avances -> resolution de problemes -> acceleration materielle. je dis ca de tete car je bosse sur un windows XP en japonais, je me souviens plus bien de la version francaise)
Ca va marche mais ca risque d'etre tres lent.
Solution 2-3 (bien fait, mais long a faire)
fais ca avec DirectX, ou WindowsMedia Encoder. perso j7ai fait ca avec WME en fullscreen (800*600). Pas de probleme pour capturer a 25 images/sec, et compresser le tout en temps reel.
Tu peux expliker avec de code car franchement J'ai pas d'idee sur le directx et merci.Solution 2-3 (bien fait, mais long a faire)
fais ca avec DirectX, ou WindowsMedia Encoder. perso j7ai fait ca avec WME en fullscreen (800*600). Pas de probleme pour capturer a 25 images/sec, et compresser le tout en temps reel.
ben si tu fais avec DirectX, tu peux utiliser DSPack, mais je le connais pas exactement et donc je sais pas si une capture d'ecran est possible ou pas.
J'ai utilise WME d'une maniere pas propre dans le passe (WME n'a pas ete porte sous delphi). En gros:
- Telecharge WME
- Utilise WME pour faire ta capture (regle les parametres et aussure toi que tout marche bien).
- Sauve les parametres (Encoder session files, fichier .wme)
- Ouvre le repertoire ou tu as enregistre le fichier wme
- Execute WinSight32 et monitore les messages (uniquement ceux envoyes par les applications nouvellement ouvertes)
- Dans l'explorateur, execute le fichier wme, et lance la capture dans WindowsMedia Encoder
- Arrete de monitorer les messages dans WinSight32.
- Quitte WME
- Dans le log de WinSight tu va trouver les messages necessaires au demarrage de la capture dans WME (c'est long mais ca se fait, crois moi. En gros tu as besoin du message qui correspond a l'appui sur le bouton "demarrer la capture")
- Maintenant tu lances Delphi
- Dans ton prog tu fais un ShellExecute de ton fichier wme
- Ensuite tu attends que WME s'ouvre, puis tu lui envoie le(s) message(s) necessaires avec SendMessage, ou PostMessage. le mieux est de faire tout ca dans un thread.
Bon je suis conscient que c'est long (surtout pour trouver quels sont les messages a envoyer). mais ca marche.
Je te conseille, dans WME, de desactiver toutes les boites de dialogues (car ca fait des messages en plus et donc il sera plus long de trouver les messages utiles avant de sauver le fichier wme)
A noter que la methode decrite ici marche avec n'importe quel logiciel, a partir du moment ou ce qu'on veut faire est en gros "d'appuyer sur un bouton automatiquement". J'utilise cette methode souvent et jusqu'ici j'ai jamais eu aucun probleme...Bon maintenant je pense que c'est a la limite de la legalite.
Bon allez...t'as de la chance que je me fasse royalement chier au taf aujourd'hui.
Mets ca dans un thread:Verifie bien que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TStartWME.Execute; var H: HWND; begin FreeOnTerminate:=true; ShellExecute(GetDesktopWindow(),'open','MaCapture.wme','','',SW_HIDE); H:=0; while H=0 do H:=FindWindow(nil,'MaCapture - Windows Media Encoder'); //Start Encoding PostMessage(H,WM_COMMAND,$00019DD0,0); end;
1-ton fichier wme est accessible
2-tu as desactive toutes les popups dans WME
3-la fenetre de WME ait bien pour titre "MaCapture - Windows Media Encoder"
Partager