117 votes

Comment enregistrer une capture d'écran directement dans un fichier sous Windows ?

Existe-t-il un moyen unique d'enregistrer une capture d'écran directement dans un fichier sous Windows ?

TheSoftwareJedi a répondu avec précision à la question ci-dessus pour Windows 8 et 10. Le matériel supplémentaire d'origine ci-dessous reste pour la postérité.

Il s'agit d'une question très importante, comme le montrent les 316 000 vues en 2021. Posée en 2008, elle a été classée hors sujet par SO vers 2015, probablement à cause de la dernière question ci-dessous.

Sous Windows XP, il est possible d'appuyer sur Alt-PrintScreen pour copier une image de l'écran. fenêtre active, ou Ctrl-PrintScreen pour copier une image du bureau complet. bureau.

Il peut ensuite être collé dans des applications qui acceptent les images : Photoshop, Microsoft Word, etc.

Je m'interroge : Existe-t-il un moyen d'enregistrer la capture d'écran directement dans un fichier fichier ? Est-ce que je vraiment doit ouvrir un programme d'image, comme Paint.net ou Photoshop, simplement pour coller une image, puis l'enregistrer ?

14 votes

Photoshop ?? Pourquoi ne pas utiliser mspaint ou paint.net ? Pourquoi utiliser quelque chose d'aussi lourd que Photoshop ?

1 votes

Le mieux que j'ai obtenu est une capture d'écran de word avec une capture d'écran d'un message d'erreur directement collé dans un courrier HTML.

0 votes

Désolé si ce n'est pas vraiment une contribution, mais je regrette qu'après toutes ces années, Microsoft n'ait toujours pas mis en œuvre ce qu'Apple a fait depuis longtemps. Le Mac enregistre l'image tout seul. Pas besoin de lancer une application et de coller. Je veux dire que pour une utilisation professionnelle, le temps c'est de l'argent. J'utilise aussi paint pour coller mais je trouve cette procédure assez lourde. Je voulais juste exprimer ma frustration ici. Merci de votre compréhension.

155voto

TheSoftwareJedi Points 15921

Avant Windows 8, il n'existe aucun moyen d'enregistrer directement dans un fichier sans outil tiers. Voici mes solutions personnelles préférées sans outil tiers.

Pour Windows 8 et les versions ultérieures

<img src="https://i.stack.imgur.com/B8Zit.png" alt="Windows Key"> + PrintScreen enregistre la capture d'écran dans un dossier dans <user>/Pictures/Screenshots

Pour Windows 7

Dans win 7, il suffit d'utiliser l'outil de découpage : Il est plus facile d'y accéder en appuyant sur Démarrer, puis en tapant "sni" (entrée). ou <img src="https://i.stack.imgur.com/B8Zit.png" alt="Windows Key"> puis sni enter

Versions antérieures de Windows

J'utilise la combinaison de clavier suivante pour capturer, puis enregistrer à l'aide de mspaint. Après l'avoir fait plusieurs fois, cela ne prend que 2 ou 3 secondes :

  1. Alt + PrintScreen
  2. Win + R ("courir")
  3. type "mspaint" enter
  4. Ctrl - V (coller)
  5. Ctrl - S (sauver)
  6. utiliser le dialogue sur les fichiers
  7. Alt - F4 (fermer mspaint)

En outre, Cropper est excellent (et open source). Il permet de capturer un rectangle dans un fichier ou dans le presse-papiers, et il est bien sûr gratuit.

2 votes

En fait, c'est étonnamment rapide et facile. De plus, si vous prenez une série de photos, vous pouvez laisser Paint ouvert et utiliser Ctrl-N pour réinitialiser la zone de peinture et Ctrl-S pour l'enregistrer (pas besoin d'enregistrer sous). Un autre avantage de laisser Paint ouvert est qu'il se souvient du format de fichier que vous avez choisi pour l'enregistrer (par exemple PNG).

1 votes

Merci @Neil. J'ai mis à jour cette réponse avec le Ctrl-S et les nouvelles fonctionnalités de win 7.

1 votes

Touche Windows + "sni" FTW !

50voto

Patrick Desjardins Points 51478

Vous pouvez coder quelque chose d'assez simple qui accrochera le PrintScreen et enregistrera la capture dans un fichier.

Voici un début de capture et d'enregistrement dans un fichier. Il vous suffira d'accrocher la touche "Imprimer l'écran".

using System;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public class CaptureScreen
{

    static public void Main(string[] args)
    {

        try
        {
            Bitmap capture = CaptureScreen.GetDesktopImage();
            string file = Path.Combine(Environment.CurrentDirectory, "screen.gif");
            ImageFormat format = ImageFormat.Gif;
            capture.Save(file, format);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

    }

    public static Bitmap GetDesktopImage()
    {
        WIN32_API.SIZE size;

        IntPtr  hDC = WIN32_API.GetDC(WIN32_API.GetDesktopWindow()); 
        IntPtr hMemDC = WIN32_API.CreateCompatibleDC(hDC);

        size.cx = WIN32_API.GetSystemMetrics(WIN32_API.SM_CXSCREEN);
        size.cy = WIN32_API.GetSystemMetrics(WIN32_API.SM_CYSCREEN);

        m_HBitmap = WIN32_API.CreateCompatibleBitmap(hDC, size.cx, size.cy);

        if (m_HBitmap!=IntPtr.Zero)
        {
            IntPtr hOld = (IntPtr) WIN32_API.SelectObject(hMemDC, m_HBitmap);
            WIN32_API.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, WIN32_API.SRCCOPY);
            WIN32_API.SelectObject(hMemDC, hOld);
            WIN32_API.DeleteDC(hMemDC);
            WIN32_API.ReleaseDC(WIN32_API.GetDesktopWindow(), hDC);
            return System.Drawing.Image.FromHbitmap(m_HBitmap); 
        }
        return null;
    }

    protected static IntPtr m_HBitmap;
}

public class WIN32_API
{
    public struct SIZE
    {
        public int cx;
        public int cy;
    }
    public  const int SRCCOPY = 13369376;
    public  const int SM_CXSCREEN=0;
    public  const int SM_CYSCREEN=1;

    [DllImport("gdi32.dll",EntryPoint="DeleteDC")]
    public static extern IntPtr DeleteDC(IntPtr hDc);

    [DllImport("gdi32.dll",EntryPoint="DeleteObject")]
    public static extern IntPtr DeleteObject(IntPtr hDc);

    [DllImport("gdi32.dll",EntryPoint="BitBlt")]
    public static extern bool BitBlt(IntPtr hdcDest,int xDest,int yDest,int wDest,int hDest,IntPtr hdcSource,int xSrc,int ySrc,int RasterOp);

    [DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
    public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,  int nWidth, int nHeight);

    [DllImport ("gdi32.dll",EntryPoint="CreateCompatibleDC")]
    public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

    [DllImport ("gdi32.dll",EntryPoint="SelectObject")]
    public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);

    [DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
    public static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll",EntryPoint="GetDC")]
    public static extern IntPtr GetDC(IntPtr ptr);

    [DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
    public static extern int GetSystemMetrics(int abc);

    [DllImport("user32.dll",EntryPoint="GetWindowDC")]
    public static extern IntPtr GetWindowDC(Int32 ptr);

    [DllImport("user32.dll",EntryPoint="ReleaseDC")]
    public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);
}

Mise à jour Voici le code qui permet d'accrocher la touche PrintScreen (et d'autres touches) à partir de C# :

Code de crochet

0 votes

Jolis extraits de code. Bien sûr, vous devriez envisager d'enregistrer l'image au format JPEG ou PNG plutôt qu'au format GIF.

0 votes

ImageFormat format = ImageFormat.Gif ; vous pouvez simplement définir ImageFormat format = ImageFormat.PNG ; ou ImageFormat format = ImageFormat.JPG ; Tout est là pour vous.

0 votes

Pourquoi ne pas utiliser Graphics.CopyFromScreen pour copier le contenu de l'écran dans un bitmap GDI+ ?

17voto

PhiLho Points 23458

Fait peu connu : dans la plupart des boîtes de dialogue standard de Windows (XP), vous pouvez appuyer sur Ctrl+C pour obtenir une copie textuelle du contenu de la boîte de dialogue.
Exemple : ouvrir un fichier dans le Bloc-notes, appuyer sur Espace, fermer la fenêtre, appuyer sur Ctrl+C dans la boîte de dialogue Confirmer la sortie, annuler, coller dans le Bloc-notes le texte de la boîte de dialogue.
Sans rapport avec votre question directe, mais j'ai pensé qu'il serait bon de le mentionner dans ce fil.

De plus, il est vrai que vous avez besoin d'un logiciel tiers pour faire la capture d'écran, mais vous n'avez pas besoin d'utiliser le grand Photoshop pour cela. Quelque chose de gratuit et de léger comme IrfanWiew ou XnView peut faire l'affaire. J'utilise MWSnap pour copier des parties arbitraires de l'écran. J'ai écrit un petit script AutoHotkey script appelant les fonctions GDI+ pour faire des captures d'écran. Etc.

0 votes

Je viens de le découvrir. Merci pour ce conseil.

0 votes

Un bon conseil. Je suis parfois frustré par les boîtes de dialogue des messages d'erreur qui ne me permettent pas de sélectionner le texte à copier. Avec cette astuce, beaucoup d'entre elles le font ! Essayez-la dans votre navigateur ici : jsfiddle.net/liamhennessy/cs3jsj6p

15voto

sdaau Points 6262

Merci pour tout le code source et les commentaires - grâce à cela, j'ai enfin l'application que je voulais :)

J'ai compilé certains des exemples, et les sources et les exécutables peuvent être trouvés ici :

http://sdaaubckp.svn.sourceforge.net/viewvc/sdaaubckp/xp-take-screenshot/

J'utilise InterceptCaptureScreen.exe - il suffit de le lancer dans un terminal à invite de commande, puis d'appuyer sur Insert lorsque vous souhaitez effectuer une capture d'écran (noms de fichiers horodatés, png, dans le même répertoire que l'exécutable) ; les touches seront capturées même si le terminal n'est pas au centre de l'attention.

(J'utilise la touche Insert, car elle devrait se propager plus facilement dans VNC que PrintScreen - qui, sur mon ordinateur portable, nécessite également d'appuyer sur la touche Fn, ce qui ne se propage pas dans VNC. Bien sûr, il est facile de changer la touche utilisée dans le code source).

J'espère que cela vous aidera, A la vôtre !

1 votes

Ce programme fonctionne parfaitement. Extrêmement simple, il fait exactement ce qu'il faut.

2 votes

Fonctionne également sous Windows 7. Pour activer les captures d'écran dans un jeu en plein écran, j'ai dû suivre la procédure suivante ces étapes .

0 votes

URL mort. (Ce n'est pas surprenant après presque dix ans).

12voto

Karthik T Points 19418

Je me rends compte qu'il s'agit d'un très vieux message, mais Windows a finalement réalisé à quel point le processus était inepte.

Dans Windows 8.1 (vérifié, ne fonctionnant pas dans Windows 7 (tnx @bobobobo))

windows key + prnt screen enregistre la capture d'écran dans un dossier dans <user>/Pictures/Screenshots

Source - http://Windows.microsoft.com/en-in/Windows/take-screen-capture-print-screen#take-screen-capture-print-screen=Windows-8

0 votes

Il ne fonctionne pas sur 7, je viens de l'essayer.

0 votes

@bobobobo ah merci, peut-être >= Windows 8 alors.

0 votes

Il fonctionne aussi sur Windows 10 . Merci KarthikT

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