ถ่ายภาพหน้าจอจากบรรทัดคำสั่งใน Windows


51

ฉันกำลังมองหาวิธีที่จะจับภาพหน้าจอของทั้งหน้าจอจากบรรทัดคำสั่ง ระบบปฏิบัติการคือ Windows บางสิ่งเช่นนี้

C:\>screenshot.exe screen1.png

1
ทำไมคุณต้องการทำอะไรแบบนั้น นอกเหนือจากข้อบกพร่องที่เห็นได้ชัด (สามารถจับภาพหน้าจอเฉพาะบรรทัดคำสั่งที่คุณกำลังทำงานอยู่) สิ่งที่ผิดปกติกับการแก้ปัญหา "ปกติ" สำหรับวัตถุประสงค์ดังกล่าวคืออะไร
โกง

7
ทำไมมันถูก จำกัด ให้ถ่ายภาพของบรรทัด cmd เท่านั้น? ฉันคิดว่าคำถามจะมีมากขึ้นตามแนวของระบบอัตโนมัติ
Gerd Klima

ในเวลาที่เขาต้องการจับภาพหน้าจอเขาต้องกด Enter เพื่อให้คำสั่งใช่ไหม? แน่นอนว่าเขาสามารถใช้สคริปต์เพื่อเปิดใช้งานเวลา แต่จากนั้นเขากลับมามีน้ำร้อนใหม่
โกง

ฉันต้องการเขียนสคริปต์ที่เปิดไฟล์ eml ในธันเดอร์เบิร์ดถ่ายภาพหน้าจอเปิดไฟล์อื่นถ่ายภาพหน้าจออีกภาพ ... สำหรับไฟล์ทั้งหมดในโฟลเดอร์ ฉันต้องการรันเครื่องมือ shot screen จากบรรทัดคำสั่งดังนั้นมันอาจเป็นไปโดยอัตโนมัติ เพียงเพื่อความชัดเจนฉันไม่ต้องการถ่ายภาพหน้าจอของบรรทัดคำสั่ง แต่เต็มหน้าจอ ในความเป็นจริงฉันได้เขียนสคริปต์แล้วฉันแค่มองหาตัวเลือกเพิ่มเติมเพื่อถ่ายภาพหน้าจอ
Noveljko Filipin

2
@Idigias: ประการแรกหน้าจอมีขนาดใหญ่กว่ากล่อง CMD แต่อย่างที่สอง: เมื่อสคริปต์เปิดใช้งานเครื่องมือ GUI เครื่องมือ GUI นั้นจะมุ่งเน้น ดังนั้น "การขาดชัดเจน" ของคุณจึงไม่ชัดเจนและไม่มีข้อบกพร่องใด ๆ คุณเคยทำงานกับบรรทัดคำสั่งหรือไม่?
tvCa

คำตอบ:


26

ดาวน์โหลดImageMagick มีเครื่องมือในการจัดการอิมเมจสำหรับบรรทัดคำสั่งจำนวนมาก การนำเข้าช่วยให้คุณสามารถจับภาพหน้าจอบางส่วนหรือทั้งหมดและบันทึกภาพเป็นไฟล์ ตัวอย่างเช่นหากต้องการบันทึกทั้งหน้าจอเป็น jpeg:

import -window root screen.jpeg

หากคุณต้องการใช้เมาส์คลิกภายในหน้าต่างหรือเลือกพื้นที่หน้าจอ & บันทึก aa png เพียงใช้:

import box.png

13
ดูเหมือนว่านี่จะไม่ทำงานบน Windows ฉันพบข้อผิดพลาด X server เกี่ยวกับไฟล์ไม่พบ
Bile Phile

2
@BinaryPhile ใช่ฉันคิดว่านี่จะใช้ได้กับเซิร์ฟเวอร์ X ที่ทำงานบน Cygwin เท่านั้น
CMCDragonkai

มันยังไม่ทำงานสำหรับฉัน ฉันได้ภาพหน้าจอ แต่มีแอปพลิเคชั่น X แสดงขึ้นมา (ตามที่คาดไว้)
reinierpost

hm, ImageMagick คือ 25 Mb, และทำสิ่งดีๆ screenCapture.bat ด้านล่างคือ 9 Kb และเพียงแค่ทำตามที่ OP ต้องการ ที่. 04% ขนาดของ ImageMagick
johny ทำไม

41

คำถามนี้ได้รับคำตอบแล้ว แต่ฉันคิดว่าฉันควรจะทำเช่นนี้ NirCmd (ฟรีแวร์เศร้าไม่ใช่โอเพ่นซอร์ส) สามารถจับภาพหน้าจอจากบรรทัดคำสั่งร่วมกับฟังก์ชั่นอื่น ๆ อีกมากมายที่สามารถทำได้

การรันสิ่งนี้จากบรรทัดคำสั่งในไดเร็กทอรีของ nircmd.exe หรือถ้าคุณคัดลอกไปยังโฟลเดอร์ system32 ของคุณ:

nircmd.exe savescreenshot screen1.png

ทำในสิ่งที่คุณต้องการ คุณสามารถหน่วงเวลาได้เช่นนี้:

nircmd.exe cmdwait 2000 savescreenshot screen1.png

ที่จะรอ 2000 มิลลิวินาที (2 วินาที) แล้วจับภาพและบันทึกภาพหน้าจอ


Nircmdไม่รองรับหลายหน้าจอ มันจะจับภาพหน้าจอหลักเท่านั้น
โทมัสเวลเลอร์

1
ดูเหมือนว่าเวอร์ชันล่าสุดสามารถทำหลายหน้าจอได้ savesc Screenshotfull [filename]
w32sh

ฉันหาลิงค์ดาวน์โหลดสำหรับ nircmd2 ไม่ได้ในตอนแรก การค้นหาของ Google ไม่แสดงอะไรเลย สำหรับผู้ใช้ที่กำลังมองหาเพื่อดาวน์โหลดnircmd2ลิงค์ดาวน์โหลดตั้งอยู่ที่ด้านล่างสุดของหน้าnirsoft.net/utils/nircmd.html คุณสามารถใช้ลิงก์ดาวน์โหลดนี้โดยตรง: nirsoft.net/utils/nircmd.zip
alpha_989

17

ก็สามารถทำได้โดยไม่ต้องเครื่องมือภายนอก (คุณเพียงแค่ต้องติดตั้งกรอบ net ซึ่งมีการติดตั้งโดยค่าเริ่มต้นทุกอย่างจาก Vista และด้านบน) - screenCapture.bat มันเป็นโปรแกรม C # ที่คอมไพล์แล้วและคุณสามารถบันทึกผลลัพธ์ในรูปแบบไม่กี่รูปแบบและจับเฉพาะหน้าต่างที่ใช้งานหรือทั้งหน้าจอ:

screenCapture- captures the screen or the active window and saves it to a file
Usage:
screenCapture  filename.format [WindowTitle]

filename - the file where the screen capture will be saved
format - Bmp,Emf,Exif,Gif,Icon,Jpeg,Png,Tiff and are supported - default is bmp
WindowTitle - instead of capturing the whole screen will capture the only a window with the given title if there's such

ตัวอย่าง:

call screenCapture notepad.jpg "Notepad"
call screenCapture screen.png

2
ทางออกที่ดีที่สุดแน่นอน ซุปเปอร์จิ๋ว 9K! นั่นคือขนาดของ ImageMagick ที่ 0.04% (25 Mb) มันใช้ฟังก์ชั่น Windows ในตัว ดีกว่าโซลูชันอื่น ๆ ทั้งหมดในหน้านี้ พิเศษสุด!
johny ทำไม

1
สิ่งหนึ่งที่ฉันสังเกตเห็นเกี่ยวกับวิธีแก้ปัญหานี้คือมีบางสิ่งที่ไม่สามารถดักจับได้ ตัวอย่างเช่นแอปพลิเคชั่นบางตัวเชื่อมต่อตัวเองและสร้างความหงุดหงิดบนแอปพลิเคชันอื่น ๆ ที่ไม่ได้แสดงผลในภาพที่ถ่าย ในกรณีที่รุนแรงเหล่านั้นฉันพบว่า MiniCap ทำงานได้ ในกรณีส่วนใหญ่โซลูชันนี้ตรงนี้เป็นวิธีที่เร็วและไม่ซับซ้อนที่สุดที่คุณสามารถหาได้
F1234k

สวัสดี @ npocmaka ฉันมีจอภาพสองจอที่เดสก์ท็อปขยายเพิ่มเข้าไป ฉันต้องการถ่ายภาพหน้าจอเดสก์ท็อปของจอภาพที่สอง แต่โปรแกรมของคุณเพียงแค่จับภาพหน้าจอจากเดสก์ท็อปหลัก เคล็ดลับใด ๆ
มินิ

@mini - คุณสามารถแก้ไขส่วน C # ของสคริปต์ใช้ นี้ ฉันจะพยายามเพิ่มเพิ่มในวันหยุดสุดสัปดาห์
npocmaka

@npocmaka เนื่องจากฉันไม่คุ้นเคยกับ C # ฉันจะรอการอัปเดตของคุณ ขอบคุณมาก.
มินิ

13

คำแนะนำอื่น ๆ ใช้ได้ - คุณสามารถลอง MiniCap ได้ฟรีและมีคุณสมบัติอื่น ๆ เช่นการตั้งชื่อไฟล์ที่ยืดหยุ่นและโหมดจับภาพที่แตกต่างกัน: http://www.donationcoder.com/Software/Mouser/MiniCap/index.html

(ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียน MiniCap)


1
จากนั้นคุณต้องเป็นผู้เขียนสกรีนแคปเตอร์ ฉันพบว่ามันเป็นทางออกที่ดีกว่าสำหรับความต้องการของฉัน ขอขอบคุณ!
jon3laze

1
ฟรีสำหรับการใช้งานส่วนตัวเท่านั้น สำหรับการใช้งานเชิงพาณิชย์จำเป็นต้องมีใบอนุญาตสำหรับ Screenshot Captor
โทมัสเวลเลอร์

9

ลองIrfanView

คุณสามารถเรียกใช้ผ่านทางบรรทัดคำสั่ง คุณสามารถระบุหน้าต่างที่จะจับภาพ - เช่นหน้าต่างทั้งหมดหรือเพียงแค่หน้าต่างปัจจุบัน / ที่ใช้งานอยู่ - และคุณยังสามารถทำการแก้ไขพื้นฐานบางอย่างเช่นการเหลาการครอบตัดหรือการปรับขนาดรูปภาพ

นี่คือตัวเลือกบรรทัดคำสั่งที่น่าสนใจเป็นพิเศษคือ

i_view32 /capture=0 /convert=wholescreen.png

6

คุณสามารถลองใช้เครื่องมือboxcutter :

usage: boxcutter [OPTIONS] [OUTPUT_FILENAME]

Saves a bitmap screenshot to 'OUTPUT_FILENAME' if given.  Otherwise, 
screenshot is stored on clipboard by default.

OPTIONS
  -c, --coords X1,Y1,X2,Y2    capture the rectange (X1,Y1)-(X2,Y2)
  -f, --fullscreen            fullscreen screenshot
  -v, --version               display version information
  -h, --help                  display help message

อันนี้รองรับจอภาพหลายจอ แต่เพิ่มพื้นที่สีดำพิเศษบางอย่างในรุ่น 1.5
Thomas Weller

สำหรับผู้ที่สนใจในขนาดกะทัดรัด boxcutter เป็นเพียง 22K สำหรับ. exe แบบเต็มหน้าจอและ 502K สำหรับ. exe ปกติ มันเป็นโอเพนซอร์ซ ใช้งานได้ดีสำหรับฉัน
frakman1

6

Screenshot-cmdใช้สกรีนช็อตของเดสก์ท็อปหรือหน้าต่างที่เลือกตามชื่อหน้าต่าง นอกจากนี้ยังเป็นไปได้ที่จะเลือกสี่เหลี่ยมผืนผ้าที่จะจับ ผลลัพธ์ถูกเก็บเป็นไฟล์ png (อัพเดทล่าสุดในปี 2554)

ตัวเลือก:
    -wt WINDOW_TITLE
            เลือกหน้าต่างที่มีชื่อนี้
            ชื่อต้องไม่มีช่องว่าง ("")
    - ว่า WINDOW_HANDLE
            เลือกหน้าต่างตามที่จับ
            (Representad เป็นสตริงฐานสิบ - fe "0012079E") 
    -rc ด้านล่างขวาด้านล่าง
            แหล่งเพาะปลูก หากไม่ได้ระบุ WINDOW_TITLE
            (0,0) อยู่ที่มุมบนสุดของเดสก์ท็อป
            อื่นถ้า WINDOW_TITLE สร้างหน้าต่างเดสก์ท็อป
            (0,0) คือมุมซ้ายบน
    -o FILENAME
            ชื่อไฟล์ที่ส่งออกถ้าไม่มีภาพจะถูกบันทึกไว้
            เป็น "screenshot.png" ในไดเรกทอรีการทำงานปัจจุบัน
    -h
            แสดงข้อมูลความช่วยเหลือนี้

แรงบันดาลใจจาก: http://blog.mozilla.com/ted/2009/02/05/command-line-scurrency-tool-for-windows/


1
นี่คือโอเพนซอร์สใบอนุญาต BSD ง่ายมากและเล็ก - สำหรับฉันนี่คือข้อดี
Jarekczek

2

คุณสามารถใช้Pillowไลบรารีหลามเพื่อจับภาพหน้าจอของจอภาพหลัก

ขั้นตอนที่ 1: ติดตั้งหมอน:

pip install -user pillow

ขั้นตอนที่ 2: จับภาพหน้าจอด้วยรหัสต่อไปนี้:

from PIL import ImageGrab
img = ImageGrab.grab()
img.save('screenshot.bmp')

1
ก่อนอื่นฉันลองใช้โซลูชันจินตภาพ แต่เมื่อฉันเห็นรหัส Python ชิ้นนั้นฉันลองใน Python CLI แบบโต้ตอบและอีกหนึ่งวินาทีต่อมาฉันมีความสุข! ขอบคุณ!!
domih

1

คุณสามารถใช้ผลิตภัณฑ์เชิงพาณิชย์snapitเพื่อจับภาพหน้าจอที่ยอดเยี่ยมจากบรรทัดคำสั่ง


2
ตอนนี้เป็นผลิตภัณฑ์เชิงพาณิชย์ต้องการ. NET และไม่วางจำหน่ายสำหรับ Windows 7 ++ ลิงก์ที่ให้ในคำตอบจะส่งคืน HTTP 404
Thomas Weller

ใช่แล้ว repo ของ GitHub นั้นไม่มีอยู่จริง
alpha_989
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.