Soyez le premier à donner votre avis sur cette source.
Vue 7 676 fois - Téléchargée 912 fois
Il vous faut : 1 form(form1), 1 picturebox(Picture1) avec Autoredraw = True et Visible = False, 3 boutons (Command1, Command2, Command3), 1 cerveau, 10 doigts :p Option Explicit ' **************** VARIABLES METHODE 1 **************** 'Cette fonction permet de simuler un appuis d'une touche. 'De cette manière, on va simuler l'appuis sur la touche 'Imprimer Ecran. Elle fonctionne avec 4 arguments : ' - bVk représente le nombre correspondant à la touche 'virtuelle. ' - bScan représente la valeur qui définie ce qui doit 'etre capturé : l'écran, l'application seulement etc... ' - dwFlags réprésente l'état de la touche (relevé appuyé) 'Non important ici ' - dwExtraInfo représente une valeur associée 32bit avec 'la touche virtuelle. Nom important ici Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) 'Constante représentant la touche virtuelle Imprim écran Const VK_SNAPSHOT As Byte = &H2C 'Constante réprésentant l'écran entier Const ecran As Byte = 1 'Constante réprésentant la form seulement Const onlyform As Byte = 0 ' ******************* FIN METHODE 1 ******************* ' ' **************** VARIABLES METHODE 2 **************** 'Fonction qui permet de retourner le handle du Bureau 'Et oui sous Windows le Bureau à un Handle Private Declare Function GetDesktopWindow Lib "user32" () As Long 'Fonction qui recupere le contexte de périphérique de la 'fenêtre d'handle hwnd. (Voir plus loin pour comprendre) Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long 'Fonction qui pour dire simple, transfert un rectangle d'une 'fenêtre dans une autre. Cela peut être traduit comme une 'copie de fenêtre. Private Declare Function BitBlt Lib "gdi32" (ByVal hDestdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 'Fonction qui renvoit les dimensions de la fenêtre de handle 'hwnd Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long 'Type RECT pour recevoir les données de la fonction GetWindowRect Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' ******************* FIN METHODE 2 ******************* Private Sub Command1_Click() 'Nettoie le buffer du presse papier Clipboard.Clear 'Appel de la fonction : on simule l'appuis de la touche 'Imprim écran, avec comme argument l'ecran seulement 'Vous pouvez changer et imprimer la form avec l'argument 'onlyform au lieu de ecran Call keybd_event(VK_SNAPSHOT, ecran, 0&, 0&) 'Attends que Windows rafraichisse le Presse papier DoEvents 'On récupère le buffer du Presse papier. (Notre image 'doit s'y trouver) SavePicture Clipboard.GetData, App.Path & "\methode1.bmp" End Sub --------------------------------------------------------------------------------- Private Sub Command3_Click() 'Nettoie le buffer du presse papier Clipboard.Clear 'Appel de la fonction : on simule l'appuis de la touche 'Imprim écran, avec comme argument l'ecran seulement 'Vous pouvez changer et imprimer la form avec l'argument 'onlyform au lieu de ecran Call keybd_event(VK_SNAPSHOT, onlyform, 0&, 0&) 'Attends que Windows rafraichisse le Presse papier DoEvents 'On récupère le buffer du Presse papier. (Notre image 'doit s'y trouver) SavePicture Clipboard.GetData, App.Path & "\methode2(juste_form).bmp" End Sub --------------------------------------------------------------------------------- Private Sub Command2_Click() Dim Suc, TwipsPerPixel, hwndsrc, hSrcDC, hdummy, xSrc, ySrc, nWidth, nHeight, hDestdc, x, y, Numpix, dwRop As Long Dim winSize As RECT 'On recupere le handle du bureau hwndsrc = GetDesktopWindow() 'On recupere le contexte de périphérique de l'handle 'ci avant. hSrcDC = GetDC(hwndsrc) 'Dimensions définies à 0 xSrc = 0: ySrc = 0 'Recupere les dimensions du bureau, soit en fait celles 'de l'écran (logique) hdummy = GetWindowRect(hwndsrc, winSize) 'Ajustement des dimensions nWidth = winSize.Right nHeight = winSize.Bottom 'Renvois un descripteur vers le contexte de périph 'de la PictureBox 'Explication donnée par VB pour être plus clair : '"La propriété hDC est un descripteur de contexte 'de périphérique dans l'environnement d'exploitation 'Microsoft Windows. Le système d'exploitation gère 'l'affichage en affectant un contexte de périphérique 'à l'objet Printer, à chaque feuille et à chaque 'contrôle PictureBox d'une application. Vous pouvez 'utiliser la propriété hDC pour faire référence au 'descripteur associé au contexte de périphérique d'un 'objet, ce qui vous permet de transmettre une valeur 'aux appels de lAPI de Windows." hDestdc = Picture1.hdc 'Dimensions definies à 0 x = 0 y = 0 'Recupération de valeur et ajustement pour le reste Form1.ScaleMode = 3 Numpix = Form1.ScaleHeight Form1.ScaleMode = 1 TwipsPerPixel = Form1.ScaleHeight / Numpix Picture1.Top = 0 Picture1.Left = 0 Picture1.Width = (nWidth + 1) * TwipsPerPixel Picture1.Height = (nHeight + 1) * TwipsPerPixel 'Pour la fonction Bitblt, représente une valeur pour 'ajuster la couleur. Il y en a des tonnes, exemple : 'SRCAND,MERGEPAINT,BLACKNESS... dwRop = &HCC0020 'Finalement on fait une copie de l'écran entier grace 'aux infos récupérées précédement. Explications : ' -hDestDc Les infos recupérées doivent être envoyées 'dans le contexte de périphérique de la PictureBox pour 'la sauvegarder. ' - x,y mesures pour ajuster la Picture1 (pour 'avoir un positionnement similaire sinon. ' -nWidth,nHeight Largeur et Hauteur de l'image pour 'la recopier dans le Picture1 (tailles similaires) ' -hSrcDc C'est le contexte de périph de la source '(ici c'est celui du Bureau) ' -xSrc,ySrc Dimensions du rectangle (avec la fonction 'GetWindowRect) Suc = BitBlt(hDestdc, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, dwRop&) 'On sauvegarde SavePicture Picture1.Image, App.Path & "\methode2.bmp" End Sub
8 oct. 2004 à 14:14
sinon, c'est super (pis t'a inversé les 2 premiers boutons)
10 juin 2004 à 10:51
25 janv. 2004 à 11:05
6 oct. 2003 à 21:27
simple avec des commentaires et utiles !!!!!!
Bravo !!!!!!!
19 juil. 2002 à 18:10
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.