Wie kann ich einen Screenshot direkt in einer Datei in Windows speichern? [geschlossen]


115

In Windows XP können Sie Alt-PrintScreen drücken, um ein Bild des aktiven Fensters zu kopieren, oder Strg-PrintScreen, um ein Bild des gesamten Desktops zu kopieren.

Dies kann dann in Anwendungen eingefügt werden, die Bilder akzeptieren: Photoshop, Microsoft Word usw.

Ich frage mich: Gibt es eine Möglichkeit, den Screenshot direkt in einer Datei zu speichern? Muss ich wirklich ein Bildprogramm wie Paint.net oder Photoshop öffnen, um einfach ein Bild einzufügen und es dann zu speichern?


14
Photoshop? Warum nicht mspaint oder paint.net verwenden? Warum etwas so Schweres wie Photoshop verwenden?
GEOCHET

1
Das Beste, was ich hier bekommen habe, war ein Screenshot von Word mit einem Screenshot einer Fehlermeldung, die direkt in eine HTML-Mail eingefügt wurde.
VVS

1
Bitte werfen Sie einen Blick auf meine Antwort, es ist ENDLICH möglich, es mindestens so einfach wie Mac zu machen (Linux Flow noch besser)
Karthik T

1
Zur Übergabe an SuperUser markiert. Obwohl die akzeptierte Antwort, wie geschrieben, programmatisch war, suchte diese Frage nach einer allgemeinen Antwort zur Computernutzung und gehört daher zu SuperUser.
ArtOfWarfare

1
Hallo, vielleicht ist es ein bisschen spät für die Antwort, aber es kann anderen mit einem ähnlichen Problem helfen. Im Windows Store gibt es eine Anwendung, mit der Sie ein Screenshot-Bild aus der Zwischenablage auf einem temporären Image auf der Festplatte speichern und den Pfad zur Datei zurückgeben können, sodass Sie es mit einer einfachen Strg + V-Taste in jeder Anwendung ( Microsoft) verwenden können. com / store / apps / 9PM34S06CFVJ ). Sie müssen keine andere Software mehr öffnen, um den Screenshot in einer Datei zu speichern.
Giovanni Esposito

Antworten:


50

Sie können etwas ziemlich Einfaches codieren, das den PrintScreen einbindet und die Aufnahme in einer Datei speichert.

Hier ist etwas zu beginnen, um zu erfassen und in einer Datei zu speichern. Sie müssen nur die Taste "Bildschirm drucken" einhaken.

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);
}

Update Hier ist der Code zum Einbinden des PrintScreen (und eines anderen Schlüssels) von C #:

Hook-Code


Schöne Code-Schnipsel. Natürlich sollten Sie in Betracht ziehen, das Bild als JPEG oder PNG anstelle von GIF zu speichern.
VVS

ImageFormat format = ImageFormat.Gif; Sie können einfach ImageFormat format = ImageFormat.PNG festlegen. oder ImageFormat format = ImageFormat.JPG; Alles ist für Sie da
Patrick Desjardins

4
OK, was soll ich mit diesem Snippet machen? Führen Sie es aus und drücken Sie jedes Mal auf den Druckbildschirm, wenn ich den Screenshot haben möchte, oder nur einmal? abgesehen davon, es zu kompilieren?
Jaime Hablutzel

3
Hatte jemand eine Binärdatei?
Timofey Trofimov

2
Ich denke nicht, dass dies "ziemlich einfach" ist ..
hejdav

153

Es gibt keine Möglichkeit, vor Windows 8 ohne ein Tool eines Drittanbieters direkt in einer Datei zu speichern. Hier sind meine persönlichen bevorzugten Tool-Lösungen von Drittanbietern.

Für Windows 8 und höher

Windows Key+ PrintScreen speichert den Screenshot in einem Ordner in<user>/Pictures/Screenshots

Für Windows 7

In Win 7 verwenden Sie einfach das Snipping-Tool: Der einfachste Zugriff erfolgt durch Drücken von Start und anschließende Eingabe von "sni" (Eingabe). oder Windows Keydannsni enter

Frühere Versionen von Windows

Ich verwende die folgende Tastaturkombination, um zu erfassen und dann mit mspaint zu speichern. Nachdem Sie es ein paar Mal gemacht haben, dauert es nur 2-3 Sekunden:

  1. Alt+PrintScreen
  2. Win+ R("run")
  3. Typ "mspaint" enter
  4. Ctrl- V(Paste)
  5. Ctrl- S(speichern)
  6. Dateidialog verwenden
  7. Alt- F4(nahe mspaint)

Darüber hinaus ist Cropper großartig (und Open Source). Es erfasst Rechtecke in Dateien oder Zwischenablagen und ist natürlich kostenlos.


2
Eigentlich ist das überraschend schnell und einfach. Wenn Sie eine Reihe von Aufnahmen machen, können Sie Paint offen lassen und den Malbereich mit Strg-N weiter zurücksetzen und mit Strg-S speichern (kein Speichern unter erforderlich). Ein weiterer Vorteil des Offenhaltens von Paint besteht darin, dass Sie sich an das von Ihnen zu speichernde Dateiformat erinnern (z. B. PNG).
Neil Mayhew

1
Danke @Neil. Ich habe diese Antwort mit Strg-S und neuen Win 7-Funktionen aktualisiert.
TheSoftwareJedi

1
Windows Key + "sni" FTW!
Jason

Beachten Sie, dass es nur für das englische Gebietsschema funktioniert. Für die polnischen wird das Werkzeug Narzędzie Wycinanie und arbeitet analog genannt: Windann w, y, enter.
Maciek

Funktioniert nicht auf dem Sperrbildschirm, ist also nicht gut für die Aufnahme dieser coolen Windows-Hintergründe. Ganz anders als auf Android, wo ich jederzeit einen Screenshot von allem aufnehmen kann, einschließlich des Sperrbildschirms.
Triynko

17

Wenig bekannte Tatsache: In den meisten Standarddialogfeldern von Windows (XP) können Sie Strg + C drücken, um eine Textkopie des Inhalts des Dialogfelds zu erhalten.
Beispiel: Öffnen Sie eine Datei im Editor, drücken Sie die Leertaste, schließen Sie das Fenster, drücken Sie im Dialogfeld "Beenden bestätigen" Strg + C, brechen Sie ab und fügen Sie den Text des Dialogfelds in den Editor ein.
Keine Beziehung zu Ihrer direkten Frage, aber ich denke, es wäre schön, in diesem Thread zu erwähnen.

Außerdem benötigen Sie eine Software von Drittanbietern, um den Screenshot zu erstellen, aber Sie müssen dafür nicht das große Photoshop starten. Etwas Freies und Leichtes wie IrfanWiew oder XnView kann den Job erledigen. Ich benutze MWSnap, um beliebige Teile des Bildschirms zu kopieren. Ich habe ein kleines AutoHotkey-Skript geschrieben, das GDI + -Funktionen aufruft, um Screenshots zu machen. Etc.


Hab das gerade gefunden. Danke für diesen Tipp.
TankorSmash

Netter Tipp. Manchmal bin ich frustriert über Fehlermeldungsdialoge, in denen ich keinen zu kopierenden Text auswählen kann. Mit diesem Tipp tun es viele von ihnen! Versuchen Sie es in Ihrem Browser hier: jsfiddle.net/liamhennessy/cs3jsj6p
Liam

15

Danke für den ganzen Quellcode und die Kommentare - dank dem habe ich endlich eine App, die ich wollte :)

Ich habe einige Beispiele zusammengestellt, und sowohl Quellen als auch ausführbare Dateien finden Sie hier:

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

Ich verwende InterceptCaptureScreen.exe. Führen Sie es einfach in einem Eingabeaufforderungsterminal aus und drücken Sie dann Einfügen, wenn Sie einen Screenshot aufnehmen möchten (Dateinamen mit Zeitstempel, PNG, in demselben Verzeichnis, in dem sich die ausführbare Datei befindet). Tasten werden erfasst, auch wenn das Terminal nicht scharfgestellt ist.

(Ich verwende die Einfügetaste, da es einfacher sein sollte, sich beispielsweise über VNC zu verbreiten als über PrintScreen - was auf meinem Laptop erfordert, dass auch die Fn-Taste gedrückt wird und sich nicht über VNC ausbreitet. Natürlich ist es einfach zu ändern, was ist der tatsächliche Schlüssel, der im Quellcode verwendet wird).

Hoffe das hilft, Prost!


1
Dieses Programm funktioniert perfekt. Extrem einfach und macht genau das, was benötigt wird.
Golmschenk

2
Funktioniert auch unter Windows 7. Um Screenshots in einem Vollbildspiel zu aktivieren, musste ich diese Schritte ausführen .
Metasequoia

Tote URL. (Kein Wunder nach fast einem Jahrzehnt.)
Camille Goudeseune

11

Sehr alter Beitrag, den ich realisiere, aber Windows erkannte schließlich, wie verrückt der Prozess war.

In Windows 8.1 (verifiziert, funktioniert nicht in Windows 7 (tnx @bobobobo))

windows key+ prnt screenspeichert den Screenshot in einem Ordner in<user>/Pictures/Screenshots

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


Bei 7 funktioniert es nicht, ich habe es nur versucht.
Bobobobo

@ Bobobobo ah danke, vielleicht> = Windows 8 dann.
Karthik T

seine Arbeit unter Windows 10 auch. Vielen Dank KarthikT
Usman Hayat Khan

6

Könnte ich WinSnap vorschlagen http://www.ntwind.com/software/winsnap/download-free-version.html . Es bietet eine automatische Speicheroption und erfasst den Alt + -Druckbildschirm und andere Tastenkombinationen, um Bildschirm, Fenster, Dialoge usw. zu erfassen.


1
Überprüfen Sie unbedingt die Einstellungen, um sie genau so einzurichten, wie Sie es möchten.
Daniel X Moore

Vielen Dank, ich habe nach einer App gesucht, mit der ich Alt + Printscreen ausführen und den Screenshot automatisch auf dem Desktop speichern kann. Das funktioniert perfekt.
Brett

Die kostenlose Version fügt ein Wasserzeichen hinzu und läuft nach 30 Tagen ab. Meh.
Camille Goudeseune

5

Dropbox bietet jetzt den Haken, um dies automatisch zu tun. Wenn Sie ein kostenloses Dropbox-Konto erhalten und die Laptop-App installieren, haben Sie beim Drücken von PrtScr Dropbox die Möglichkeit, alle Screenshots automatisch in Ihrem Dropbox-Ordner zu speichern.


Dies hat tatsächlich funktioniert und ich denke, es ist der schnellste Weg, den Bildschirm zu erfassen und zu speichern. Wenn es meine Frage wäre, würde ich sie als akzeptieren markieren.
Muhammad Raheel

2

Für diese Funktionalität in XP benötigen Sie ein Screen Grab-Dienstprogramm eines Drittanbieters. Ich grabe Scott Hanselmans umfangreiches Bloggen über coole Tools und suche dort normalerweise nach einem solchen Dienstprogramm - sicher genug, er hat hier über ein paar gebloggt .


2

Dies wird es in Delphi tun. Beachten Sie die Verwendung der BitBlt-Funktion, bei der es sich um einen Windows-API-Aufruf handelt, der nicht spezifisch für Delphi ist.

Bearbeiten: Beispielverwendung hinzugefügt

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

Ja, ohne ein Dienstprogramm zum automatischen Speichern von Screenshots zu installieren. Es gibt verschiedene Dienstprogramme, die Sie jedoch finden können, wenn Sie dies tun.

Zum Beispiel: http://www.screenshot-utility.com/


Oh, schade, dass das uralt ist. Zuletzt aktualisiert im Jahr 2001.
isaaclw

1

Natürlich können Sie ein Programm schreiben, das die Zwischenablage überwacht und für jedes Bild in der Zwischenablage einen nervigen SaveAs-Dialog anzeigt ;-). Ich denke, Sie können sogar herausfinden, ob die zuletzt gedrückte Taste PrintScreen war, um die Anzahl der Fehlalarme zu begrenzen.

Während ich darüber nachdenke, könnten Sie auch nach jemandem googeln, der genau das bereits getan hat.


EDIT : .. oder warten Sie einfach, bis jemand die Quelle hier veröffentlicht - wie es gerade passiert ist :-)


1

Snagit ... viele Techniker nutzen das.


Warum für ein Tool bezahlen, wenn Sie nur einen Screenshot machen möchten?
Dane411

1

Bevor Sie ein Bildschirmaufnahmeprogramm installieren, das ich empfehle, verwenden Sie am besten die Standardmethode "Bildschirm drucken". Öffnen Sie dann Microsoft Office Picture Manager und fügen Sie den Screenshot einfach in den weißen Bereich des gewünschten Verzeichnisses ein. Es wird eine Bitmap erstellt, die Sie bearbeiten oder als anderes Format speichern können.


Obwohl dies funktionieren mag, fragt der Fragesteller wahrscheinlich nach einer Möglichkeit, dies programmgesteuert zu tun.
Peter O.

1

Vielen Dank an TheSoftwareJedi für die Bereitstellung nützlicher Informationen zum Snapping-Tool in Windows 7. Verknüpfung zum Öffnen des Snipping-Tools: Gehen Sie zu Start, geben Sie sni ein. Den Namen finden Sie in der Liste "Snipping-Tool".

Geben Sie hier die Bildbeschreibung ein


1

Lassen Sie Picasa im Hintergrund laufen und klicken Sie einfach auf die Schaltfläche "Bildschirm drucken"

Quelle


0

Soweit ich in XP weiß, müssen Sie eine andere App verwenden, um sie tatsächlich zu speichern.

Vista wird mit dem Snipping-Tool geliefert, das den Vorgang etwas vereinfacht!


0

Es stellt sich heraus, dass Google Picasa (kostenlos) dies jetzt für Sie erledigt. Wenn Sie es geöffnet haben, wird der Screenshot beim Drücken in einer Datei gespeichert und in Picasa geladen. Nach meiner Erfahrung funktioniert es großartig!



-6

Ist das möglich:

  1. Drücken Sie Alt PrintScreen
  2. Öffnen Sie einen Ordner
  3. Rechtsklick -> Screenshot einfügen

Beispiel:

Das Benchmark-Ergebnisfenster ist geöffnet. Machen Sie einen Screenshot. Öffnen Sie C: \ Benchmarks. Klicken Sie mit der rechten Maustaste -> Screenshot einfügen. Eine Datei mit dem Namen screenhot00x.jpg wird angezeigt, wobei Text-Screenshot00x ausgewählt ist. Geben Sie Overclock5 ein

Das ist es. Keine Notwendigkeit, etwas zu öffnen. Wenn Sie nichts schreiben, bleibt der Standardname erhalten.


Welche Windows-Version hat einen Menüeintrag "Screenshot einfügen"? (und bei einem Inhalt der Zwischenablage vom Typ Bild ist in win7 kein Einfügen aktiviert).
eckes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.