Capture d'écran en .net 2.0 (sans api)

5/5 (17 avis)

Vue 24 159 fois - Téléchargée 2 417 fois

Description

Ce matin en lisant mes Feeds RSS, je suis tombé sur cette source : http://www.codeproject.com/csharp/ScreenCapture.asp

Après l'avoir lu et nettoyer de ce qui ne sert à rien... je vous la livre ;)

Cette source permet de faire des captures d'écran en .net sans utiliser les API win32... (enfin pas directement)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
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
38
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
38
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;

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.