Screenshots d'un jeu

Partagez votre expérience de PureBasic avec les autres utilisateurs.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Screenshots d'un jeu

Message par bombseb »

Bonjour,

J'aimerais faire un petit programme qui fasse des screenshots à répétition d'un jeu qui se lance en plein écran.
J'ai éssayé avec l'api GetDesktopWindow, mais évidemment ca ne marche pas puisque ca capture le bureau windows...
Est-ce que vous savez si c'est faisable facilement ?
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Screenshots d'un jeu

Message par jbernard13 »

et avec la touche Imp Ecran ?
Jbernard13
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Screenshots d'un jeu

Message par Ar-S »

Arf j'ai essayé ça mais au moment de prendre la capture il retourne sur le bureau.

Code : Tout sélectionner

UseJPEGImageEncoder()

Procedure CaptEcran (Destination$ , LargSortie, HautSortie)
  
  EcranX.i = GetSystemMetrics_(#SM_CXSCREEN)
  EcranY.i = GetSystemMetrics_(#SM_CYSCREEN)
  
  Debug EcranX
  
  
  Im = CreateImage(1, EcranX, EcranY)
  
  If Im = 0
    ProcedureReturn 0
    
  Else 
    Debug Destination$+FormatDate("LDVM_%yyyy%mm%dd%hh%ii%ss",Date())+".jpg"
    Debug Im
    
    hWnd = GetDesktopWindow_()
    hDDC = GetDC_(hWnd)
    hDC = StartDrawing(ImageOutput(1))
    BitBlt_(hDC,0,0,ImageWidth(1),ImageHeight(1),hDDC,0,0,#SRCCOPY)
    StopDrawing()
    ReleaseDC_(hWnd,hDDC)
    
    If LargSortie = 0 Or HautSortie = 0 Or Str(LargSortie) = "" Or Str(HautSortie) = ""
      ResizeImage(Im, EcranX, EcranY)
      If LargSortie <> EcranX Or HautSortie <> EcranY
        ResizeImage(Im, LargSortie, HautSortie)
      EndIf

    EndIf
     
    Result = SaveImage(1, Destination$+FormatDate("LDVM_%yyyy%mm%dd%hh%ii%ss",Date())+".jpg",#PB_ImagePlugin_JPEG,8)
    FreeImage(1)
    If Result <> 0
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf
    
  EndIf
  
EndProcedure


Delay(8000) ; histoire d'avoir le temps de retourner dans le jeu pour tester.

Test = CaptEcran("C:\",800,600)

; Si résultat = 1 alors ça a marché sinon resultat = 0
Debug Test

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Screenshots d'un jeu

Message par kernadec »

bonjour bombseb
peut être que si tu faisais une recherche "screenshot" sur le forum.. :wink:
Enfin en voilà une, Qui peut être va te donner des idées.
http://www.purebasic.fr/french/viewtopi ... 1462&hilit

Cordialement
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Screenshots d'un jeu

Message par bombseb »

Salut, merci pour vos réponses
et avec la touche Imp Ecran ?
Ben non, car je voudrais faire des copies d'écran à répétition et que ca me les sauve dans des fichiers bmp....tout ca automatiquement bien sur....


Apparement l'api GetDesktopWindow sert uniquement à capturer le bureau avec les applications ouvertes
Je pense qu'il faut bidouiller en directx pour faire ca...

Edit : J'ai peut être oublié de vous préciser que le jeux dont je veux faire des captures ouvre un écran directx en plein écran...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Screenshots d'un jeu

Message par Ar-S »

Et sinon FRAPS ?

Ce qu'a dit JB n'est pas si idiot que ça.
Si en PB tu simules le clique "Impr Ecran" (surement via l'API SendMessage_ ), tu devrais pouvoir ensuite sauver (GetClipboardImage) l'image en Jpeg et recommencer l'opération toutes les x secondes avec une simple boucle...
Vu que imprim Ecran permet des captures même de jeu ça devrait marcher.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Screenshots d'un jeu

Message par graph100 »

il y a pas mal de jeu maintenant dans lesquels imp ecran est géré par le jeu lui même. Essaie de faire un screen lol ^^
c'est pas géré.
J'avais vu un truc sur le fofo anglais pour dessiner dans l'ecran graphique du jeu, après la 3D, il doit être possible de copier ce qui est à l'écran. Mais cela impliquait des injections de dll etc... ca relève du niveau de fraps là !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Screenshots d'un jeu

Message par djes »

Si ton jeu est fait avec PB, un simple

Code : Tout sélectionner

u = GrabSprite(#PB_Any, 0, 0, 1024, 768)
SaveSprite(u, "c:\screenshot.bmp")
devrait le faire
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Screenshots d'un jeu

Message par comtois »

http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Screenshots d'un jeu

Message par bombseb »

Merci, c'est exactement ca qui me fallait, mais bon ca à l'air trop compliqué, je laisse tomber :oops:
l'idée c'était de faire des screenshot à répétitions pour pouvoir ripper les sprites d'un jeu facilement...
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Screenshots d'un jeu

Message par venom »

oui comme dit Ar-S,

via PB tu simule la touche imprime ecrant tout les x seconde via l'API je pense que ça peut le faire


voici un post j'ai pas de PB sous la main pour tester mais tu doit trouver sa sur le forum.




@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre