Snapshot

Résolu
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010 - 16 mars 2007 à 10:37
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 - 16 mars 2007 à 12:09
Bonjour à tous,
Voilà je travail sur VB  NET 2005
j'aimerai pouvoir capturer une zone de l'écran sous forme image et enregistrer ce fichier.
J'ai essayer une source sur vb france permettant le snapshot mais elle ne fonctionne pas.

Quelqu'un connaitrai une fonction permettant ceci?

Merci d'avance

10 réponses

CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
16 mars 2007 à 11:14
Salut
http://www.vbfrance.com/codes/FAIRE-APERCU-APPLIS-FICHIERS-OUVERTS-DANS-FORM-AVEC_41785.aspx


C'est du vb 6 certe...


Mais rien ne tempeche de le retranscrire en .net et de le poster par la suite afin denrichir le forum  

Si l'informatique été de l'alcool il y aurait des genies partout
3
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 11:22
ccj : Une telle source existe déja
toosdu87 : regarde cette source : http://www.vbfrance.com/codes/SCREENSHOT-SNAPSHOT-SANS-CLIPBOARD-NI-SENDKEYS_30267.aspx
Il y a une classe vb2003 et une classe vb2005.

L'exemple (le zip) est en vb2003 mais il est compatible vb2005.
J'ai fait une version beaucoup plus importante en vb2005 mais c'est un des projets que je presente en fin d'année pour mon exam, j'attend donc de l'avoir passer pour le mettre à disposition ici.
Néanmoins, ce qui est déja present devrait repondre amplement à ta question.

Have fun
Hvb aka Batto
bato.ltd at gmail.com
3
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
16 mars 2007 à 11:29
Merci pour vos sources je vais jeter un oeil.
cependant la source de hvb je l'ai tester est elle ne fonctionne pas.
Enfin je vais insister
Merci les gars
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 11:36
en quoi elle ne fonctionne pas? soit plus précis, car avancer sans rien derriere qu'elle ne fonctionne pas alors que plusieurs personne de mon école l'utilise sans problème, et que plusieurs personnes d'ici l'ont testé n'est pas très correct.

Hvb aka Batto
bato.ltd at gmail.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
16 mars 2007 à 11:50
C'est pas ce que je veux dire, cependant lorsque je l'ai lancé et tester rien ne s'est passé.
Comme je t'ai dis au dessus je vais me mettre bien dedans pour comprendre comment ca tourne
0
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
16 mars 2007 à 11:56
Pour être plus précis j'ai 6 avertissements au départ du type:
accès à un membre partagé.......
il doit me manquer quelque chose pour qu'il tourne bien.

Ta eu ce souci?
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 12:00
oui je prefere lol...
Les fonctions de ma classe renvoient un objet de type bitmap, il suffit donc de les appeler et de stocker le resultat dans un fichier bitmap, et c'est ensuite à toi de faire l'enregistrement de fichier.
Si tu veux voir un exemple, lance l'exemple que j'ai joint avec la source, qui, une fois converti pour vb2005, fonctionne sans aucuns soucis (je viens de retester car tu m'as fait douter sur la compatibilité 2003/2005)

Hvb aka Batto
bato.ltd at gmail.com
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 12:04
post croisé desolé.
Pour les avertissements, je viens de voir ça, alors dans l'ordre : 
ligne 362 : enleve le "datez" avant now.tostring
ligne 368,371 et 373 : remplace touts les "curscreen" par ScreenShoter

Hvb aka Batto
bato.ltd at gmail.com
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 12:08
et il reste 2 avertissements dans la classe,  que j'ai modifié pour y paliere (je l'avais fait en vb2005 mais pas en vb2003) :

Public

Class ScreenShoter

Private
Declare
Function BitBlt
Lib
"GDI32" (
ByVal hDestDC
As IntPtr,
ByVal X
As
Integer,
ByVal Y
As
Integer,
ByVal nWidth
As
Integer,
ByVal nHeight
As
Integer,
ByVal hSrcDC
As IntPtr,
ByVal SrcX
As
Integer,
ByVal SrcY
As
Integer,
ByVal Rop
As
Integer)
As
Integer

Private
Declare
Function GetForegroundWindow
Lib
"user32" ()
As IntPtr

Private
Declare
Function GetWindowRect
Lib
"user32.dll" (
ByVal hWnd
As IntPtr,
ByRef lpRect
As Rectangle)
As
Integer

Private
Declare
Function GetDesktopWindow
Lib
"user32" ()
As IntPtr

'Capture tout l'écran

Public
Shared
Function ShotScreen()
As Bitmap

Try

Dim DesktopRect
As Rectangle = Screen.GetBounds(
New Point(0, 0))
'obtient la taille du bureau sous forme de rectangle dans DesktopRect

Return ShotScreenPart(DesktopRect.Width, DesktopRect.Height)
'appele la fonction ShotScreenPart avec les dimensions du bureau.

Catch ex
As ExceptionMsgBox(ex.ToString)

Return
New Bitmap(1, 1)

End
Try

End
Function

'Capture la fenetre active

Public
Shared
Function ShotActiveWin()
As Bitmap

Dim WinRect
As Rectangle

Try

If GetWindowRect(GetForegroundWindow, WinRect)
Then
'obtient la taille et la position de la fenetre active sous forme de rectangle (WinRect)

Return ShotScreenPart(WinRect.Size.Width - WinRect.Left, WinRect.Size.Height - WinRect.Top, WinRect.Left, WinRect.Top)
'appele la fonction ShotLoc avec les dimensions et la position de la fenetre.

Else

Return
New Bitmap(1, 1)

End
If

Catch ex
As ExceptionMsgBox(ex.ToString)

Return
New Bitmap(1, 1)

End
Try

End
Function

'Capture une partie de l'ecran, defini par les deux variable width et height (dimensions du rectangle), et des valeur optionels X et Y (base du rectangle)

Public
Shared
Function ShotScreenPart(
ByVal nwidth
As
Integer,
ByVal nheight
As
Integer,
Optional
ByVal x
As
Integer = 0,
Optional
ByVal y
As
Integer = 0)
As Bitmap

Dim resultBmp
As Bitmap =
New Bitmap(nwidth, nheight)
'crée l'objet bitmap cible

Dim SrcGraph
As Graphics = Graphics.FromHwnd(GetDesktopWindow)
'crée l'objet "graphics" SelGraph a partir du handdle du bureau

Dim BmpGraph
As Graphics = Graphics.FromImage(resultBmp)
'crée un objet graphics à partir du bitmap

Dim bmpDC
As IntPtr = BmpGraph.GetHdc()
'obtient le device context du bitmap

Dim hDC
As IntPtr = SrcGraph.GetHdc()
'obtient le device context du bureauBitBlt(bmpDC, 0, 0, nwidth, nheight, hDC, x, y, &HCC0020)

'"bit-block transfer" : copie chaque bits affichés dans le device context hDC dans le device context du bitmap SrcGraph.ReleaseHdc(hDC)

'relache le device context du bureauBmpGraph.ReleaseHdc(bmpDC)

'relache le device context du bitmapSrcGraph.Dispose()

BmpGraph.Dispose()

'libere toutes les ressources crées par l'objet (useless?)

Return resultBmp

End
FunctionEnd

Class

Hvb aka Batto
bato.ltd at gmail.com
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
16 mars 2007 à 12:09
cependant, ces avertissements n'empchait pas le fonctionnement du programme...
ça te génere un erreur? Tu n'as pas de fichier crée dans le repertoire de l'exe? (SnapShotSample\bin)

desolé pour le mitraillage de messages lol...

Hvb aka Batto
bato.ltd at gmail.com
0
Rejoignez-nous