Print Screen

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Print Screen

Message par Parole De JOJO »

Il y a-t-il un moyen de capturer l'ecran et l'enregistrer en tant qu'imaqe?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Print Screen

Message 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 
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Print Screen

Message par Parole De JOJO »

merci
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Print Screen

Message par Backup »

@Nico : j'utilise toujours ton prg ;)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Print Screen

Message par nico »

Merci Dobro, le code aurait besoin d'une mise à jour!
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Print Screen

Message par Parole De JOJO »

c'est super mais comment je lenregistre dans lordi en tant kimage
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Print Screen

Message 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
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Print Screen

Message 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
charvista
Messages : 5
Inscription : dim. 13/déc./2009 14:05

Re: Print Screen

Message 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
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Print Screen

Message par Parole De JOJO »

merci bcp
Répondre