40 votes

Quelle est la meilleure façon de faire des captures d'écran d'une fenêtre avec C++ dans Windows ?

Quel est le meilleur moyen (le plus facile) de faire une capture d'écran d'une application en cours d'exécution avec C++ sous Windows ?

30voto

sharptooth Points 93379

Vous devez obtenir le contexte du dispositif de la fenêtre ( GetWindowDC() ) et copier l'image ( BitBlt() ) de celui-ci. En fonction de ce que vous savez de l'application, vous utiliserez différentes méthodes pour trouver le handle de la fenêtre à passer dans la commande GetWindowDC() .

9 votes

Veuillez ajouter plus de détails sur la façon d'utiliser GetWindowDC et BitBlt pour obtenir une capture d'écran. je veux aussi les détails....

4voto

Daemin Points 5651

Sur le keybd_event Dans la documentation de la fonction, il est indiqué que vous pouvez l'utiliser pour faire une capture d'écran et l'enregistrer dans le presse-papiers. Par exemple :

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);

Dans ma version (Visual Studio 2005 help installé sur mon ordinateur), il est indiqué que vous pouvez réaliser une capture d'écran de l'ensemble du bureau en définissant le deuxième paramètre sur 0, ou une capture d'écran de la seule application en cours en le définissant sur 1.

L'extraction de la mémoire tampon du presse-papiers est un exercice pour le lecteur.

Cependant, je réfléchirais bien avant de faire cela, car cela va détruire toutes les données d'image déjà présentes dans le presse-papiers.

1 votes

C'est l'événement pour la touche PrintScr du clavier. le 'keybd_event' que vous avez indiqué ne peut pas être utilisé pour prendre une capture d'écran. quel malentendu !

2 votes

@Paul Suivez le lien que j'ai inclus et consultez la section Remarques. Il est écrit : "Une application peut simuler une pression sur la touche PRINTSCRN afin d'obtenir une capture d'écran et de l'enregistrer dans le presse-papiers. Pour ce faire, appelez keybd_event avec le paramètre bVk défini sur VK_SNAPSHOT."

0 votes

Oh ok je vois, je ne savais pas qu'on pouvait simuler la pression de la touche printscr :)

3voto

sflee Points 638

Voici un exemple code
Vous pouvez faire CaptureAnImage(GetDesktopWindow()); pour faire une capture d'écran.

-2voto

Daniel Points 1

Le bureau est un dispositif "virtuel" qui interagit avec l'utilisateur et qui, par conséquent, contient potentiellement des informations relatives à la vie privée. Je suggère qu'un contrôle de sécurité ou un avertissement du système d'exploitation soit ajouté lorsque l'exécutable tente de faire une capture d'écran, à moins que l'utilisateur final n'indique explicitement qu'il sait ce qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X