CAPTURE D'ÉCRAN EN .NET 2.0 (SANS API)

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 1 févr. 2006 à 12:12
blade196 Messages postés 14 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 2 juillet 2010 - 21 mai 2010 à 21:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35841-capture-d-ecran-en-net-2-0-sans-api

blade196 Messages postés 14 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 2 juillet 2010
21 mai 2010 à 21:42
oui dsl, je sais que ce n'est normalement pas le meilleur endroit pour poser ma question mais c'est plus en désespoir de cause que je reviens te demander conseil.
j'ai déjà posté un message sur le forum mais qui n'a pas eu grand succès. et ta source étant ce qui se rapproche le plus de ce que je recherche, je me suis dis que tu verrai surement rapidement ce qui cloche dans ma pseudo solution
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
21 mai 2010 à 17:22
tu sais ici ce n'est pas un forum, on n'est pas là pour résoudre les problèmes sur tes sources... mais pour parler de ma source :)

pourquoi ne pas poster un message sur le forum ?
blade196 Messages postés 14 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 2 juillet 2010
21 mai 2010 à 17:03
bon aller on va tenter une dernière fois de demander conseil. pour me simplifier la vie j'ai decidé de lancer moi meme l'appli histoire d'etre sur d'avoir le bon handle mais le probleme persiste

Dim proc As Process = New Process
proc.StartInfo.FileName = fileName
proc.StartInfo.CreateNoWindow = False
proc.StartInfo.WindowStyle = ProcessWindowStyle.Maximized
proc.Start()
proc.WaitForInputIdle()

Dim f1 As Form = New Form(proc.MainWindowHandle) 'ou proc.handle mais aucun ne marche, f1 vaut nothing

Dim r1 As Rectangle = f1.RectangleToScreen(f1.ClientRectangle)
Dim bmp As Bitmap = New Bitmap(r1.Width, r1.Height, PixelFormat.Format32bppArgb)
Using g As Graphics = Graphics.FromImage(bmp)
g.CopyFromScreen(r1.Left, r1.Top, 0, 0, r1.Size, CopyPixelOperation.SourceCopy)
End Using

bmp.Save(pictureName)
proc.CloseMainWindow()
proc.Close()
blade196 Messages postés 14 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 2 juillet 2010
3 mai 2010 à 10:26
merci de ton aide. je pensai pouvoir me débrouiller avec sa mais j'ai un problème pour recuperer ma fenêtre que je ne comprend pas.

f = Form.FromHandle(CaptureScreen.GetWindow(CaptureScreen.FindWindow(vbNullString, "StarUML"), 0))
le méthode getWindow n'est peut être pas la plus adapté mais je n'en ai pas trouvé d'autre.
f reste null et je ne sais pas pourquoi. ma fenêtre StarUML est réduit dans ma barre des taches et je peu faire un closeWindow dessus si je la restaure.
je n'arrive pas non plus a faire de showWindow dessus pour la restaurer

si tu a une idée je suis preneur sinon si tu peu juste m'indiquer une voie vers ou chercher sa devrait me suffire
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
30 avril 2010 à 14:49
Oui, il est possible de faire une capture d'une autre fenêtre...
Si mes souvenir sont bon, si tu connais le hWnd de la fenêtre, tu peux faire :

Form f = Form.FromHandle( unhWnd ) as From;
blade196 Messages postés 14 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 2 juillet 2010
30 avril 2010 à 14:11
merci pour le bout de code, sa me parait plus simple a utiliser que les api. j'ai juste une petite question: est ce que je peu faire une impression de la zone client d'une autre application?
pour le moment j'essaye de m'inspirer du bout de code qui récupère la zone client du formulaire mais je ne vois pas comment lui dire que par exemple, la fenêtre StarUML est une Form. je ne connais que FindWindow pour recuperer l'appli que je veux pour le moment (j'ai commencé le vb il y a 2 jour...)
papat2006 Messages postés 6 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 26 février 2009
16 oct. 2008 à 10:44
Génial, exactement ce que je cherchais !
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 juil. 2007 à 21:06
Vince, c'est seulement le code qui est disponible dans le ZIP, pour obtenir un fichier executable tu dois compiler le code avec un compilateur ou avec Visual Studio par exemple:

http://www.microsoft.com/france/msdn/vstudio/express/vcsharp/telechargez.mspx
vincedav31 Messages postés 9 Date d'inscription lundi 24 juillet 2006 Statut Membre Dernière intervention 18 novembre 2008
5 juil. 2007 à 15:13
J'ai un très gros soucis, voilà je débute en programmation, et je ne sais pas comment faire apparaître la fenêtre qui ressemble au screen placé au début du tuto.
Quand je telecharge le fichier .zip il ne contient que des fichiers inconnu par windows !
HELP ME !
bzhhydde Messages postés 1 Date d'inscription mardi 26 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
21 mars 2007 à 16:51
Je viens d utiliser ton code et jel e trouve parfait, exactement ce que je voulais!!!

Je m explique je suis actuellement sur une application qui créer une carte de membre a partir du nom, prenom et photo, ainsi avec une capture d ecran j arrive a un resultat tel qu il est a l ecran, ce que veut le client!

il peut donc faire ses modification avec le picture box et hop en 1 click il a le resultat!

merci j ai galéré avant de trouver qque chose de simple!
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
7 mars 2007 à 15:03
Et voici son petit frère fais sous IronPython
http://www.pythonfrance.com/code.aspx?ID=41773
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 mars 2006 à 03:25
C'est à cause du mode de rendering utilisé par DirectShow.

Petit test amusant, créer une forme la plus simple possible, et dans la constructeur tu mets :

this.BackColor = Color.FromArgb( 16, 0, 16 ); // Overlay DirectShow ( noir )

Tu lances WMP ( Windows Media Player ) avec une vidéo assez large ( ou taille x 2 ) pour le test, tu passes ta forme au premier plan devant WMP, et maintenant tu peux déplacer ta forme c'est elle qui reçoit la vidéo dans sa zone cliente au lieu d'avoir un fond noir, le test est encore plus évident si une autre fenêtre masque totalement WMP et vient s'intercaler entre WMP et ta forme C#, c'est la magie des overlays : )

Si dans WMP tu fais Menu -> Outils -> Options -> Performance -> Options avancées -> dans accélération vidéo tu décoches "Utiliser les superpositions" ( superposition c'est la traduction française d'overlay ; ) tu n'auras plus cet effet là.

Conclusion, le logiciel que tu veux capturer utilise les overlays.

J'aurais pu faire une capture d'écran pour te montrer ce que ça donne mais ça aurait été tout noir :D
fdouieb Messages postés 264 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 12 juin 2013 3
24 mars 2006 à 12:14
Bonjour,

Très bien le Frameries 2

Petite question: Il existe toujours le problème des vidéos.
Je m'explique, j'ouvre dans le coin de mon écran une petite vidéo. Je fait la capture et a l'emplacement de la vidéo un rectangle noir.

Est-ce qu'une personne a un code qui permet de remplacer ce rectangle noir par une image de la video.

Je vous explique mon but.

Je développe un control parental qui envoie les faits et geste de nos bambins a une adresse mail. Entre autre, une capture d'écran tous les x seconds. Vous comprendrai que le rectangle noir n'est pas exactement ce que je souhaite voir.
imuammer Messages postés 1 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 25 février 2006
25 févr. 2006 à 20:27
very good
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
17 févr. 2006 à 19:05
Ah si finalement :

Control.DrawToBitmap WM_PRINT PrintWindow
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 févr. 2006 à 13:09
oui... je l'ai précisé sur mon Blog...
il manque plus que l'implémentation de PrintWindow :(
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 12:12
Ah vi bien les nouvelles fonctions en .NET 2.0. La méthode CopyFromScreen est l'implémentation managée de BitBlt en fait..
Rejoignez-nous