Comment puis-je enregistrer une capture d'écran directement dans un fichier sous Windows? [fermé]


115

Sous Windows XP, on peut appuyer sur Alt-PrintScreen pour copier une image de la fenêtre active, ou Ctrl-PrintScreen pour copier une image du bureau complet.

Celui-ci peut ensuite être collé dans des applications acceptant les images: Photoshop, Microsoft Word, etc.

Je me demande: existe-t-il un moyen d'enregistrer la capture d'écran directement dans un fichier? Dois-je vraiment ouvrir un programme d'image, comme Paint.net ou Photoshop, simplement pour coller une image, puis l'enregistrer?


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

1
Le mieux que j'ai eu ici était une capture d'écran de mot avec une capture d'écran d'un message d'erreur directement collé dans un courrier HTML.
VVS

1
Jetez un œil à ma réponse, il est ENFIN possible de le faire au moins aussi facilement que sur Mac (le flux linux est toujours meilleur)
Karthik T

1
Marqué pour le passage à SuperUser. Bien que la réponse acceptée ait fini par être une réponse programmatique, telle que rédigée, cette question cherchait une réponse d'utilisation générale de l'ordinateur et appartient donc à SuperUser.
ArtOfWarfare

1
Salut, il est peut-être un peu tard pour la réponse, mais cela peut aider les autres avec un problème similaire. Il existe une application dans le Windows Store avec laquelle vous pouvez enregistrer une image de capture d'écran du presse-papiers dans une image temporaire sur le disque et renvoyer le chemin d'accès au fichier, afin que vous puissiez l'utiliser avec un simple ctrl + v dans n'importe quelle application ( microsoft. com / store / apps / 9PM34S06CFVJ ). Vous n'avez plus besoin d'ouvrir un autre logiciel pour enregistrer la capture d'écran dans un fichier.
Giovanni Esposito

Réponses:


50

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

Voici quelque chose pour commencer à capturer et à enregistrer dans un fichier. Il vous suffira de raccrocher la touche "Imprimer é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 pour accrocher le PrintScreen (et une autre clé) de C #:

Code de crochet


Beaux extraits de code. Bien sûr, vous devriez envisager d'enregistrer l'image au format JPEG ou PNG au lieu de GIF.
VVS

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

4
OK, que dois-je faire avec cet extrait de code? l'exécuter et appuyer sur l'écran d'impression à chaque fois que je veux la capture d'écran, ou juste une fois? à part le compiler?
Jaime Hablutzel

3
Quelqu'un avait-il un binaire?
Timofey Trofimov

2
Je ne pense pas que ce soit "assez simple" ..
hejdav

153

Il n'y a aucun moyen d'enregistrer directement dans un fichier sans un outil tiers avant Windows 8. Voici mes solutions d'outils non tierces préférées.

Pour Windows 8 et versions ultérieures

Windows Key+ PrintScreen enregistre la capture d'écran dans un dossier dans<user>/Pictures/Screenshots

Pour Windows 7

Dans win 7, utilisez simplement l'outil de capture: le plus facilement accessible en appuyant sur Démarrer, puis en tapant "sni" (entrée). ou Windows Keyalorssni enter

Versions antérieures de Windows

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

  1. Alt+PrintScreen
  2. Win+ R("courir")
  3. tapez "mspaint" enter
  4. Ctrl- V(coller)
  5. Ctrl- S(enregistrer)
  6. utiliser la boîte de dialogue de fichier
  7. Alt- F4(fermer mspaint)

De plus, Cropper est génial (et open source). Il capture un rectangle dans un fichier ou un presse-papiers, et est bien sûr gratuit.


2
En fait, c'est étonnamment rapide et facile. De plus, si vous prenez une série de prises de vue, vous pouvez laisser Paint ouvert et utiliser Ctrl-N pour continuer à réinitialiser la zone de peinture et Ctrl-S pour l'enregistrer (pas besoin d'enregistrer sous). Un autre avantage de garder Paint ouvert est qu'il se souvient de votre choix de format de fichier pour enregistrer (par exemple PNG).
Neil Mayhew

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

1
touche Windows + FTW "sni"!
Jason

Notez que cela ne fonctionne que pour les paramètres régionaux anglais. Pour polonais l'outil est nommé Narzędzie Wycinanie et œuvres analogiquement: Winpuis w, y, enter.
maciek

Ne fonctionne pas sur l'écran de verrouillage, donc pas bon pour capturer ces arrière-plans de fenêtres cool. Très différent sur Android, où je peux capturer une capture d'écran de n'importe quoi, à tout moment, y compris l'écran de verrouillage.
Triynko

17

Fait peu connu: dans la plupart des boîtes de dialogue Windows (XP) standard, vous pouvez appuyer sur Ctrl + C pour avoir une copie textuelle du contenu de la boîte de dialogue.
Exemple: ouvrez un fichier dans le Bloc-notes, appuyez sur espace, fermez la fenêtre, appuyez sur Ctrl + C dans la boîte de dialogue Confirmer la sortie, annulez, collez dans le Bloc-notes le texte de la boîte de dialogue.
Sans rapport avec votre question directe, mais je pensais que ce serait bien de le mentionner dans ce fil.

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


Je viens de trouver ça maintenant. Merci pour cette astuce.
TankorSmash

Bon conseil. Parfois, je suis frustré par les boîtes de dialogue de message d'erreur qui ne me permettent pas de sélectionner le texte à copier. Avec cette astuce, beaucoup d'entre eux le font! Essayez-le dans votre navigateur ici: jsfiddle.net/liamenthennessy/cs3jsj6p
Liam

15

Merci pour tout le code source et les commentaires - grâce à cela, j'ai enfin une 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 - lancez-le simplement dans un terminal d'invite de commande, puis appuyez sur Insérer lorsque vous souhaitez capturer une capture d'écran (noms de fichiers horodatés, png, dans le même répertoire que l'exécutable); les clés seront capturées même si le terminal n'est pas au point.

(J'utilise la touche Insertion, car elle devrait avoir plus de facilité à se propager à travers, par exemple, VNC que PrintScreen - ce qui sur mon ordinateur portable nécessite que la touche Fn soit également enfoncée, et cela ne se propage pas via VNC. Bien sûr, il est facile de changer quoi est la clé réelle utilisée dans le code source).

J'espère que cela aide, à bientôt!


1
Ce programme fonctionne parfaitement. Extrêmement simple et fait exactement ce qui est nécessaire.
golmschenk

2
Fonctionne également sous Windows 7. Pour activer les captures d'écran dans un jeu en plein écran, je devais suivre ces étapes .
metasequoia

URL morte. (Pas étonnant après presque une décennie.)
Camille Goudeseune

11

Très vieux message que je réalise, mais Windows a finalement réalisé à quel point le processus était insensé.

Sous Windows 8.1 (vérifié, ne fonctionne pas sous Windows 7 (tnx @bobobobo))

windows key+ prnt screenenregistre 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


Cela ne fonctionne pas sur 7, je l'ai juste essayé.
bobobobo

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

son travail sur Windows 10 aussi. Merci KarthikT
Usman Hayat Khan

6

Puis-je suggérer WinSnap http://www.ntwind.com/software/winsnap/download-free-version.html . Il fournit une option d'enregistrement automatique et capture l'écran alt + imprime et d'autres combinaisons de touches pour capturer l'écran, les fenêtres, la boîte de dialogue, etc.


1
Assurez-vous de vérifier les paramètres pour le configurer exactement comme vous le souhaitez.
Daniel X Moore

Merci, je cherchais une application qui pourrait me permettre de faire Alt + Printscreen et d'enregistrer automatiquement la capture d'écran sur le bureau. Cela fonctionne parfaitement.
Brett

La version gratuite ajoute un filigrane et expire après 30 jours. Meh.
Camille Goudeseune

5

Dropbox fournit maintenant le crochet pour faire cela automatiquement. Si vous obtenez un compte Dropbox gratuit et installez l'application pour ordinateur portable, lorsque vous appuyez sur PrtScr Dropbox vous donnera la possibilité de stocker automatiquement toutes les captures d'écran dans votre dossier Dropbox.


Cela a fonctionné et je pense que c'est le moyen le plus rapide de capturer et d'enregistrer l'écran. Si c'était ma question, je la marquerais comme acceptée.
Muhammad Raheel

2

Vous avez besoin d'un utilitaire de capture d'écran tiers pour cette fonctionnalité dans XP. Je creuse les nombreux blogs de Scott Hanselman sur les outils sympas et j'y cherche généralement un tel utilitaire - bien sûr, il a blogué sur un couple ici .


2

Cela le fera dans Delphi. Notez l'utilisation de la fonction BitBlt, qui est un appel d'API Windows, pas quelque chose de spécifique à Delphi.

Edit: Ajout d'exemple d'utilisation

function TForm1.GetScreenShot(OnlyActiveWindow: boolean) : TBitmap;
var
  w,h : integer;
  DC : HDC;
  hWin : Cardinal;
  r : TRect;
begin
  //take a screenshot and return it as a TBitmap.
  //if they specify "OnlyActiveWindow", then restrict the screenshot to the
  //currently focused window (same as alt-prtscrn)
  //Otherwise, get a normal screenshot (same as prtscrn)
  Result := TBitmap.Create;
  if OnlyActiveWindow then begin
    hWin := GetForegroundWindow;
    dc := GetWindowDC(hWin);
    GetWindowRect(hWin,r);
    w := r.Right - r.Left;
    h := r.Bottom - r.Top;
  end  //if active window only
  else begin
    hWin := GetDesktopWindow;
    dc := GetDC(hWin);
    w := GetDeviceCaps(DC,HORZRES);
    h := GetDeviceCaps(DC,VERTRES);
  end;  //else entire desktop

  try
    Result.Width := w;
    Result.Height := h;
    BitBlt(Result.Canvas.Handle,0,0,Result.Width,Result.Height,DC,0,0,SRCCOPY);
  finally
    ReleaseDC(hWin, DC) ;
  end;  //try-finally
end;

procedure TForm1.btnSaveScreenshotClick(Sender: TObject);
var
  bmp : TBitmap;
  savdlg : TSaveDialog;
begin
  //take a screenshot, prompt for where to save it
  savdlg := TSaveDialog.Create(Self);
  bmp := GetScreenshot(False);
  try
    if savdlg.Execute then begin
      bmp.SaveToFile(savdlg.FileName);
    end;
  finally
    FreeAndNil(bmp);
    FreeAndNil(savdlg);
  end;  //try-finally
end;


1

Sans installer un utilitaire de sauvegarde automatique de capture d'écran, oui. Il existe plusieurs utilitaires que vous pouvez cependant trouver pour cela.

Par exemple: http://www.screenshot-utility.com/


Oh, dommage que ce soit ancien. Dernière mise à jour en 2001.
isaaclw

1

Bien sûr, vous pouvez écrire un programme qui surveille le presse-papiers et affiche une boîte de dialogue SaveAs ennuyeuse pour chaque image du presse-papiers ;-). Je suppose que vous pouvez même savoir si la dernière touche enfoncée était PrintScreen pour limiter le nombre de faux positifs.

Pendant que j'y pense ... vous pouvez également rechercher sur Google quelqu'un qui a déjà fait exactement cela.


EDIT : .. ou attendez simplement que quelqu'un publie la source ici - comme c'est arrivé :-)


1

Snagit ... beaucoup de techniciens utilisent ça.


pourquoi payer pour un outil alors que tout ce que vous voulez, c'est juste faire une capture d'écran?
Dane411

1

À moins d'installer un programme de capture d'écran, ce que je recommande, la meilleure façon de le faire est d'utiliser la méthode standard d'impression d'écran, puis ouvrez Microsoft Office Picture Manager et collez simplement la capture d'écran dans la zone blanche du répertoire que vous désirez. Cela créera une image bitmap que vous pourrez modifier ou enregistrer sous un format différent.


Bien que cela puisse fonctionner, le demandeur demande probablement un moyen de le faire par programme.
Peter O.1

1

Merci à TheSoftwareJedi pour avoir fourni des informations utiles sur l'outil de capture dans Windows 7. Raccourci pour ouvrir l'outil de capture: Allez dans Démarrer, tapez sni Et vous trouverez le nom dans la liste "Outil de capture"

entrez la description de l'image ici



0

Pour autant que je sache dans XP, oui, vous devez utiliser une autre application pour l'enregistrer.

Vista est livré avec l'outil Snipping, qui simplifie un peu le processus!


0

Il s'avère que Google Picasa (gratuit) le fera pour vous maintenant. Si vous l'avez ouvert, lorsque vous appuyez dessus, il enregistre la capture d'écran dans un fichier et la charge dans Picasa. D'après mon expérience, cela fonctionne très bien!



-6

Est-ce possible:

  1. Appuyez sur Alt PrintScreen
  2. Ouvrir un dossier
  3. Clic droit -> coller la capture d'écran

Exemple:

La fenêtre des résultats de référence est ouverte, prenez une capture d'écran. Ouvrez C: \ Benchmarks Clic droit -> Coller la capture d'écran Un fichier nommé screenshot00x.jpg apparaît, avec le texte screenshot00x sélectionné. Tapez Overclock5

C'est tout. Pas besoin d'ouvrir quoi que ce soit. Si vous n'écrivez rien, le nom par défaut reste.


quelle version de Windows a une entrée de menu "coller capture d'écran"? (et avec un contenu de presse-papiers de type image, aucune pâte n'est activée dans win7).
eckes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.