Page 1 sur 1

Print Screen

Publié : mar. 21/sept./2010 16:33
par Parole De JOJO
Il y a-t-il un moyen de capturer l'ecran et l'enregistrer en tant qu'imaqe?

Re: Print Screen

Publié : mar. 21/sept./2010 16:56
par nico
Un exemple pris sur Pureaera:

Code : Tout sélectionner

; German forum: 
; Author: Unknown (updated for PB 4.00 by Andre)
; Date: 31. December 2002
; OS: Windows
; Demo: No

;Bitmap anlegen 
CreateImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN)) 
;auf angelegtes Bitmap zeichnen 
DC = StartDrawing(ImageOutput(0)) 
BitBlt_(DC,0,0,ImageWidth(0),ImageHeight(0),GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY ) 
StopDrawing() 

;Bitmap an Fenstergroesse anpassen 
ResizeImage(0,640,480) 

If OpenWindow(0, 10, 10, 640, 480, "Screenshot", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
StartDrawing(WindowOutput(0)) 
DrawImage(ImageID(0),0,0) 
StopDrawing() 
  Repeat 
    EventID.l = WaitWindowEvent() 
    If EventID = #PB_Event_CloseWindow 
      Quit = 1 
    EndIf 
  Until Quit = 1 
EndIf 
End 

Re: Print Screen

Publié : mar. 21/sept./2010 17:56
par Parole De JOJO
merci

Re: Print Screen

Publié : mar. 21/sept./2010 20:19
par Backup
@Nico : j'utilise toujours ton prg ;)

Re: Print Screen

Publié : mar. 21/sept./2010 21:39
par nico
Merci Dobro, le code aurait besoin d'une mise à jour!

Re: Print Screen

Publié : mer. 22/sept./2010 8:50
par Parole De JOJO
c'est super mais comment je lenregistre dans lordi en tant kimage

Re: Print Screen

Publié : mer. 22/sept./2010 9:33
par Backup
Parole De JOJO a écrit :c'est super mais comment je lenregistre dans lordi en tant kimage
heu ! apprends a utiliser la touche F1
cela appel la doc de Purebasic

tu aura acces a la bibliotheque image ...
et donc a l'instruction
Resultat = SaveImage(#Image, NomFichier$ [, ImagePlugin [, Options [, Profondeur]]])

avant de poser une question utilise le bouton rechercher du forum
et/ou utilise la touche F1 dans l'editeur de Purebasic ,pour avoir la doc !

de plus je t'encourage a regarder les Tuto
ici :
http://www.purebasic.fr/french/viewtopi ... =21&t=6664

Re: Print Screen

Publié : mer. 22/sept./2010 10:31
par Parole De JOJO
ok ta raison
merci bcp en tout cas
la prochaine fois je me casserais un peu plus la tete avant de vous prendre la tete

Re: Print Screen

Publié : sam. 02/oct./2010 0:51
par charvista
Merci Dobro de m'avoir rappelé à moi aussi que c'est SaveImage() -- la touche F1 étant trop loin :mrgreen:
Pour aider tout le monde, et surtout Jojo qui en a fort besoin :roll: je me suis mis à écrire une procédure complète (nico: comme ça c'est mis à jour :P )
Je suis quasi nul en API mais là il me semble que l'auteur original de cet excellent code a oublié un ReleaseDC_()... (sans doute pour que la mémoire ne déborde pas lorsqu'on s'amuse à garder l'écran chaque seconde!) Je l'ai ajouté, ça ne semble pas faire de mal à l'ordinateur ni à PureBasic... mais quelqu'un peut-il le confirmer?

Code : Tout sélectionner

Procedure.s zPrintScreen(FileName.s)
    Im=CreateImage(#PB_Any,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN)); create a fullscreen bitmap
    hWnd=GetDesktopWindow_()
    hDDC=GetDC_(hWnd)
    hDC=StartDrawing(ImageOutput(Im))
        BitBlt_(hDC,0,0,ImageWidth(Im),ImageHeight(Im),hDDC,0,0,#SRCCOPY)
    StopDrawing()
    ReleaseDC_(hWnd,hDDC)
    ;ResizeImage(Im,800,600); image can be resized
    If UCase(FileName)="/A"
        FileName.s=_PrintScreen+FormatDate("PrintScreen_%yyyy%mm%dd%hh%ii%ss",Date())+".jpg"; _PrintScreen est le répertoire où je stocke mes impression-écrans
    EndIf
    If UCase(FileName)=""
        Input.s=InputRequester("PrintScreen","Save Screen Image As...",_PrintScreen+FormatDate("PrintScreen_%yyyy%mm%dd%hh%ii%ss",Date())+".jpg")
        If Input.s=""
            FreeImage(Im)
            ProcedureReturn ""
        EndIf
        FileName.s=Input.s
    EndIf
    UseJPEGImageEncoder()
    Result=SaveImage(Im,FileName,#PB_ImagePlugin_JPEG,10)
    FreeImage(Im)
    If Result
        ProcedureReturn FileName.s
    Else
        ProcedureReturn ""
    EndIf
EndProcedure
Exemple d'usage:

Code : Tout sélectionner

Global _PrintScreen="C:\Temp\PrintScreen\"; remplacez ce répertoire par le vôtre
zPrintScreen("/A"); ""=prompt, "/A"=automatique, or un nom de fichier valide

Re: Print Screen

Publié : mer. 06/oct./2010 11:34
par Parole De JOJO
merci bcp