[Screenshot, capture d'écran] Comment l'enregistrer dans un Bitmap ?

Résolu
kinkey_wizard Messages postés 30 Date d'inscription dimanche 24 octobre 2004 Statut Membre Dernière intervention 4 juillet 2005 - 22 déc. 2004 à 02:10
kinkey_wizard Messages postés 30 Date d'inscription dimanche 24 octobre 2004 Statut Membre Dernière intervention 4 juillet 2005 - 22 déc. 2004 à 16:50
Bonjour tout le monde,

Voici une source qui pour l'instant a pour effet de prendre une capture de l'écran (par simulation d'appui sur la touche PrintScreen) et de créer un fichier bitmap "vide" (sans image) à côté.

.386
.model flat, stdcall
option casemap :none

; INCLUDES ET BIBLIOTHEQUES
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\rasapi32.inc
include \masm32\include\advapi32.inc
include \masm32\include\shell32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\rasapi32.lib
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib

.data
pathbmp db "c:\masm32\bin\testil.bmp"

.code
start:

Push 0
Push 0
Push 0
Push VK_SNAPSHOT
Call keybd_event      ; On appuie sur le touche PrintScreen.

Push 0
Push KEYEVENTF_KEYUP
Push 0
Push VK_SNAPSHOT
Call keybd_event      ; On relache la touche PrintScreen.

Push 0
Call OpenClipboard      ; On ouvre le presse papier (clipboard).

Push 0         
Push FILE_ATTRIBUTE_NORMAL
Push OPEN_ALWAYS
Push 0
Push 0
Push GENERIC_WRITE
Push OFFSET pathbmp
Call CreateFile              ; On crée un fichier bitmap.

Call CloseClipboard      ; On ferme le presse papier.

Push 0
Call ExitProcess      ; On quitte le programme.
end start


Mon problème est que j'aimerais beaucoup savoir s'il serait possible (et si oui COMMENT, merci) d'enregistrer le contenu du presse papier (à savoir la capture d'écran) dans le fichier bitmap.

Je pense que je peux utiliser l'API WriteFile pour cela mais je ne la comprends pas très bien (ou plutôt je ne vois pas comment faire). Si cela peut aider je précise que je peux toujours recuperer le handle du contenu du presse papier avec ceci :
Push CF_BITMAP
Call GetClipboardData


En vous remerciant par avance... ;)

3 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
22 déc. 2004 à 14:41
Code capture d'ecran complet en C ici, tu traduiras en asm.
Il ne faut pas encombrer le clipboard pour faire cela.
http://www.cppfrance.com/code.aspx?id=11128
Version optimisee d'enregistrement refaite ici:
http://www.cppfrance.com/code.aspx?id=11139

ciao...
BruNews, MVP VC++
3
kinkey_wizard Messages postés 30 Date d'inscription dimanche 24 octobre 2004 Statut Membre Dernière intervention 4 juillet 2005
22 déc. 2004 à 02:16
Je n'ai pas trouvé le module d'édition des posts, j'ai supposé qu'il n'existait pas ici. Veuillez m'excuser si ce n'est pas le cas.

C'était juste pour une précision : dans le code que j'ai donné au dessus je sais pertinament que le fait d'ouvrir et de refermer le presse papier ne sert à rien. J'ai rajouté cela uniquement en prévision d'une utilité future.

Merci.
0
kinkey_wizard Messages postés 30 Date d'inscription dimanche 24 octobre 2004 Statut Membre Dernière intervention 4 juillet 2005
22 déc. 2004 à 16:50
Merci beaucoup BruNews. ;)
0
Rejoignez-nous