Bagaimana cara menyimpan tangkapan layar langsung ke file di Windows? [Tutup]

115

Di Windows XP, seseorang dapat menekan Alt-PrintScreen untuk menyalin gambar dari jendela aktif, atau Ctrl-PrintScreen untuk menyalin gambar dari desktop penuh.

Ini kemudian dapat disisipkan ke aplikasi yang menerima gambar: Photoshop, Microsoft Word, dll.

Saya bertanya-tanya: Apakah ada cara untuk menyimpan tangkapan layar langsung ke file? Apakah saya benar - benar harus membuka program gambar, seperti Paint.net atau Photoshop, hanya untuk menempelkan gambar, lalu menyimpannya?

David Koelle
sumber
14
Photoshop ?? Mengapa tidak menggunakan mspaint atau paint.net? Mengapa menggunakan sesuatu yang berat seperti photoshop ??
GEOCHET
1
Yang terbaik yang saya dapatkan di sini adalah tangkapan layar kata dengan tangkapan layar dari beberapa pesan kesalahan yang langsung ditempelkan ke dalam email HTML.
VVS
1
Silakan lihat jawaban saya, AKHIRNYA mungkin untuk melakukannya semudah Mac (aliran linux masih lebih baik)
Karthik T
1
Ditandai untuk dipindahkan ke SuperUser. Meskipun jawaban yang diterima akhirnya menjadi jawaban terprogram, seperti yang tertulis, pertanyaan ini mencari jawaban penggunaan komputer umum dan jadi milik SuperUser.
ArtOfWarfare
1
Hai, mungkin agak terlambat untuk jawabannya tetapi ini dapat membantu orang lain yang memiliki masalah serupa. Ada sebuah aplikasi di Windows Store yang dengannya Anda dapat menyimpan gambar tangkapan layar dari papan klip ke gambar sementara pada disk dan mengembalikan jalur ke file, sehingga Anda dapat menggunakannya dengan ctrl + v sederhana di aplikasi apa pun ( microsoft. com / store / apps / 9PM34S06CFVJ ). Anda tidak perlu lagi membuka perangkat lunak lain untuk menyimpan tangkapan layar ke file.
Giovanni Esposito

Jawaban:

50

Anda dapat membuat kode sesuatu yang sangat sederhana yang akan menghubungkan PrintScreen dan menyimpan hasil tangkapannya dalam sebuah file.

Berikut adalah sesuatu untuk mulai menangkap dan menyimpan ke file. Anda hanya perlu mengaitkan tombol "Print screen".

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

Perbarui Berikut adalah kode untuk menghubungkan PrintScreen (dan kunci lainnya) dari C #:

Kode pengait

Patrick Desjardins
sumber
Potongan kode yang bagus. Tentu saja Anda harus mempertimbangkan untuk menyimpan gambar sebagai JPEG atau PNG, bukan GIF.
VVS
ImageFormat format = ImageFormat.Gif; Anda tinggal mengatur format ImageFormat = ImageFormat.PNG; atau ImageFormat format = ImageFormat.JPG; Semua ada di sini untuk Anda
Patrick Desjardins
4
Oke, apa yang harus saya lakukan dengan cuplikan itu? jalankan dan tekan layar cetak setiap kali saya ingin tangkapan layar, atau hanya sekali? selain dari menyusunnya?
Jaime Hablutzel
3
Apakah ada yang punya biner?
Timofey Trofimov
2
Saya tidak berpikir ini "cukup sederhana" ..
hejdav
153

Tidak ada cara untuk menyimpan langsung ke file tanpa alat pihak ketiga sebelum Windows 8. Berikut adalah solusi alat non-pihak ketiga favorit saya.

Untuk Windows 8 dan yang lebih baru

Windows Key+ PrintScreen menyimpan tangkapan layar ke dalam folder di<user>/Pictures/Screenshots

Untuk Windows 7

Di win 7 cukup gunakan alat snipping: Paling mudah diakses dengan menekan Start, lalu ketik "sni" (enter). atau Windows Keykemudiansni enter

Versi Windows sebelumnya

Saya menggunakan kombinasi keyboard berikut untuk mengambil gambar, kemudian menyimpan menggunakan mspaint. Setelah Anda melakukannya beberapa kali, hanya perlu 2-3 detik:

  1. Alt+PrintScreen
  2. Win+ R("lari")
  3. ketik "mspaint" enter
  4. Ctrl- V(tempel)
  5. Ctrl- S(simpan)
  6. gunakan dialog file
  7. Alt- F4(mspaint dekat)

Selain itu, Cropper sangat bagus (dan open source). Itu melakukan pengambilan persegi panjang ke file atau clipboard, dan tentu saja gratis.

TheSoftwareJedi
sumber
2
Sebenarnya, ini sangat cepat dan mudah. Selain itu, jika Anda mengambil serangkaian bidikan, Anda dapat membiarkan Paint terbuka, dan menggunakan Ctrl-N untuk terus menyetel ulang area cat dan Ctrl-S untuk menyimpannya (tidak perlu Save as). Keuntungan lain dari membiarkan Paint tetap terbuka adalah ia mengingat pilihan format file yang akan Anda simpan (misalnya PNG).
Neil Mayhew
1
Terima kasih @Neil. Saya memperbarui jawaban ini dengan Ctrl-S dan fitur win 7 baru.
TheSoftwareJedi
1
tombol windows + "sni" FTW!
Jason
Perhatikan bahwa ini hanya berfungsi untuk bahasa Inggris lokal. Untuk Polandia alat ini bernama Narzędzie Wycinanie dan karya analogis: Winkemudian w, y, enter.
maciek
Tidak berfungsi pada layar kunci, jadi tidak bagus untuk menangkap latar belakang jendela yang keren itu. Sangat berbeda dengan di Android, yang mana saya bisa menangkap screenshot apa saja, kapan saja, termasuk layar kunci.
Triynko
17

Fakta yang tidak banyak diketahui: di sebagian besar dialog standar Windows (XP), Anda dapat menekan Ctrl + C untuk mendapatkan salinan teks dari konten dialog.
Contoh: buka file di Notepad, tekan spasi, tutup jendela, tekan Ctrl + C pada dialog Konfirmasi Keluar, batal, tempel di Notepad teks dialog.
Tidak terkait dengan pertanyaan langsung Anda, tetapi saya pikir akan menyenangkan untuk disebutkan di utas ini.

Selain itu, memang, Anda memerlukan perangkat lunak pihak ketiga untuk melakukan tangkapan layar, tetapi Anda tidak perlu menggunakan Photoshop yang besar untuk itu. Sesuatu yang gratis dan ringan seperti IrfanWiew atau XnView dapat melakukan pekerjaan itu. Saya menggunakan MWSnap untuk menyalin bagian sembarang dari layar. Saya menulis skrip AutoHotkey kecil yang memanggil fungsi GDI + untuk melakukan screenshot. Dll

PhiLho
sumber
Baru saja menemukan ini sekarang. Terima kasih atas tip itu.
TankorSmash
Tip yang bagus. Kadang-kadang saya frustrasi dengan dialog pesan kesalahan yang tidak mengizinkan saya memilih teks untuk disalin. Dengan tip ini, banyak dari mereka melakukannya! Cobalah di browser Anda di sini: jsfiddle.net/liamhennessy/cs3jsj6p
Liam
15

Terima kasih untuk semua kode sumber dan komentar - terima kasih untuk itu, akhirnya saya memiliki aplikasi yang saya inginkan :)

Saya telah mengumpulkan beberapa contoh, dan sumber serta file yang dapat dieksekusi dapat ditemukan di sini:

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

Saya menggunakan InterceptCaptureScreen.exe - cukup jalankan di terminal command prompt, lalu tekan Sisipkan saat Anda ingin mengambil tangkapan layar (nama file yang diberi stempel waktu, png, di direktori yang sama tempat file dapat dieksekusi); kunci akan ditangkap bahkan jika terminal tidak fokus.

(Saya menggunakan tombol Sisipkan, karena seharusnya lebih mudah menyebarkan melalui, katakanlah, VNC daripada PrintScreen - yang pada laptop saya mengharuskan tombol Fn juga ditekan, dan itu tidak menyebar melalui VNC. Tentu saja, mudah untuk mengubah apa adalah kunci sebenarnya yang digunakan dalam kode sumber).

Semoga ini bisa membantu, Cheers!

sdaau
sumber
1
Program ini bekerja dengan sempurna. Sangat sederhana dan hanya melakukan apa yang dibutuhkan.
golmschenk
2
Bekerja di Windows 7 juga. Untuk mengaktifkan tangkapan layar dalam permainan layar penuh, saya harus mengikuti langkah-langkah ini .
metasequoia
URL mati. (Tidak mengherankan setelah hampir satu dekade.)
Camille Goudeseune
11

Posting yang sangat lama saya sadari, tetapi windows akhirnya menyadari betapa bodohnya proses itu.

Di Windows 8.1 (diverifikasi, tidak berfungsi di Windows 7 (TNX @bobobobo))

windows key+ prnt screenmenyimpan tangkapan layar ke dalam folder di<user>/Pictures/Screenshots

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

Karthik T
sumber
Tidak berhasil pada 7, saya baru mencobanya.
bobobobo
@bobobobo ah terima kasih, mungkin> = windows 8 lalu.
Karthik T
kerjanya di windows 10 juga. Terima kasih KarthikT
Usman Hayat Khan
6

Mungkin saya menyarankan WinSnap http://www.ntwind.com/software/winsnap/download-free-version.html . Ini menyediakan opsi autosave dan menangkap alt + printscreen dan kombinasi tombol lainnya untuk menangkap layar, jendela, dialog, dll.

Jason
sumber
1
Pastikan untuk memeriksa pengaturan untuk mengaturnya persis seperti yang Anda inginkan.
Daniel X Moore
Terima kasih, sedang mencari aplikasi yang memungkinkan saya melakukan Alt + Printscreen dan otomatis menyimpan tangkapan layar ke desktop. Ini bekerja dengan sempurna.
Brett
Versi gratis menambahkan watermark, dan kedaluwarsa setelah 30 hari. Meh.
Camille Goudeseune
5

Dropbox sekarang menyediakan pengait untuk melakukan ini secara otomatis. Jika Anda mendapatkan akun dropbox gratis dan menginstal aplikasi laptop, saat Anda menekan PrtScr Dropbox akan memberi Anda opsi untuk secara otomatis menyimpan semua tangkapan layar ke folder dropbox Anda.

mwengler
sumber
Ini benar-benar berfungsi dan saya pikir adalah cara tercepat untuk menangkap dan menyimpan layar. Jika itu pertanyaan saya, saya akan menandainya sebagai menerima.
Muhammad Raheel
2

Anda memerlukan utilitas penangkap layar pihak ketiga untuk fungsionalitas itu di XP. Saya menggali blog ekstensif Scott Hanselman tentang alat - alat keren dan biasanya mencari di sana untuk utilitas semacam itu - tentu saja, dia menulis blog tentang pasangan di sini .

Peter Meyer
sumber
2

Ini akan dilakukan di Delphi. Perhatikan penggunaan fungsi BitBlt, yang merupakan panggilan API Windows, bukan sesuatu yang spesifik untuk Delphi.

Edit: Menambahkan penggunaan contoh

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;
JosephStyons
sumber
2

Coba ini: http://www.screenshot-utility.com/

Dari beranda mereka:

Saat Anda menekan tombol pintas, itu menangkap dan menyimpan snapshot layar Anda ke file JPG, GIF atau BMP.

JosephStyons
sumber
1

Tanpa menginstal utilitas screenshot autosave, ya Anda lakukan. Ada beberapa utilitas yang dapat Anda temukan, tetapi ikuti cara ini.

Misalnya: http://www.screenshot-utility.com/

mattlant
sumber
Ah, sayang sekali itu kuno. Terakhir diperbarui pada tahun 2001.
isaaclw
1

Tentu saja Anda bisa menulis program yang memonitor clipboard dan menampilkan dialog SaveAs yang mengganggu untuk setiap gambar di clipboard ;-). Saya rasa Anda bahkan dapat mengetahui apakah tombol terakhir yang ditekan adalah PrintScreen untuk membatasi jumlah positif palsu.

Sementara saya memikirkannya .. Anda juga bisa google untuk seseorang yang sudah melakukan hal itu.


EDIT : .. atau tunggu saja seseorang memposting sumbernya di sini - seperti yang terjadi :-)

VVS
sumber
1

Snagit ... banyak orang teknologi menggunakannya.

pearcewg.dll
sumber
mengapa harus membayar alat saat yang Anda inginkan hanyalah mengambil tangkapan layar?
Dane411
1

Singkatnya menginstal program screen capture, yang saya rekomendasikan, cara terbaik untuk melakukannya adalah dengan menggunakan metode Print Screen standar, kemudian buka Microsoft Office Picture Manager dan cukup paste screenshot ke area putih direktori yang Anda inginkan. Ini akan membuat bitmap yang dapat Anda edit atau simpan-sebagai format yang berbeda.

Mike Kowalczyk
sumber
Meskipun ini mungkin berhasil, penanya kemungkinan besar menanyakan cara untuk melakukan ini secara terprogram.
Peter O.
1

Terima kasih kepada TheSoftwareJedi yang telah memberikan informasi berguna tentang snapping tool di Windows 7. Pintasan untuk membuka Snipping tool: Pergi ke Start, ketik sni Dan Anda akan menemukan namanya di daftar "Snipping Tool"

masukkan deskripsi gambar di sini

Zahid Rouf
sumber
1

Biarkan Picasa tetap berjalan di latar belakang, dan cukup klik tombol "Print Screen"

Sumber

Abilash A
sumber
0

Sejauh yang saya tahu di XP, ya Anda harus menggunakan beberapa aplikasi lain untuk benar-benar menyimpannya.

Vista hadir dengan alat Snipping, yang sedikit menyederhanakan proses!

Penjual Mitchel
sumber
0

Ternyata Google Picasa (gratis) akan melakukannya untuk Anda sekarang. Jika Anda membukanya, saat Anda menekannya akan menyimpan tangkapan layar ke file dan memuatnya ke Picasa. Menurut pengalaman saya, ini bekerja dengan baik!

Z O.
sumber
-6

Apakah ini mungkin:

  1. Tekan Alt PrintScreen
  2. Buka folder
  3. Klik kanan -> tempel tangkapan layar

Contoh:

Jendela hasil benchmark terbuka, ambil screenshot. Buka C: \ Benchmarks Klik kanan -> Tempel tangkapan layar Sebuah file bernama screenshot00x.jpg muncul, dengan teks screenshot00x dipilih. Ketik Overclock5

Itu dia. Tidak perlu membuka apapun. Jika Anda tidak menulis apa pun, nama default tetap ada.

Olotila
sumber
versi windows apa yang memiliki entri menu "tempel tangkapan layar"? (dan dengan konten clipboard jenis gambar tidak ada pasta yang diaktifkan di win7).
eckes