Сделайте снимок экрана из командной строки в Windows


51

Я ищу способ сделать скриншот всего экрана из командной строки. Операционная система Windows. Что-то вроде этого:

C:\>screenshot.exe screen1.png

1
Почему вы хотите сделать что-то подобное? Помимо очевидного недостатка (возможности делать скриншоты только из командной строки, над которой вы сейчас работаете), что не так с «обычными» решениями для этой цели?
Ладья

7
Почему было бы запрещено фотографировать только строку cmd? Я думаю, что вопрос идет больше по линии автоматизации.
Герд Клима

Ну, в момент, когда он хочет сделать скриншот, он должен нажать Enter, чтобы дать команду, не так ли? Конечно, он мог использовать сценарий, чтобы активировать его по времени, но потом он действительно заново изобретает горячую воду.
Ладья

Я хотел бы написать скрипт, который открывает файл eml в Thunderbird, делает снимок экрана, открывает другой файл, делает еще один снимок экрана ... Для всех файлов в папке. Я хочу запустить инструмент снимка экрана из командной строки, чтобы он мог быть автоматизирован. Просто чтобы прояснить, я не хочу делать снимок экрана командной строки, но весь экран. На самом деле, я уже написал сценарий, я просто ищу больше вариантов, чтобы сделать снимок экрана.
Желько Филипин

2
@Idigias: во-первых, экран больше, чем поле CMD, но во-вторых: когда скрипт запускает инструмент с графическим интерфейсом, этот инструмент с графическим интерфейсом получает фокус. Итак, ваш «очевидный недостаток» не очевиден, и недостатка тоже нет. Вы когда-нибудь работали с командной строкой?
tvCa

Ответы:


26

Скачать imagemagick . Многие инструменты для работы с изображениями из командной строки включены. Импорт позволяет вам захватить весь экран или часть экрана и сохранить изображение в файл. Например, чтобы сохранить весь экран в формате JPEG:

import -window root screen.jpeg

Если вы хотите использовать мышь, чтобы щелкнуть внутри окна или выбрать область экрана и сохранить файл, просто используйте:

import box.png

13
Это не похоже на работу в Windows. Я получаю ошибку X-сервера о том, что файл не найден.
Binary Phile

2
@BinaryPhile Да, я думаю, это будет работать только с X-сервером, работающим на Cygwin.
CMCDragonkai

Это все еще не работает для меня. Я получаю скриншот, но отображаются только приложения X (как и ожидалось).
reinierpost

хм, ImageMagick - 25 Мб, и делает массу интересных вещей. Размер экрана screenCapture.bat ниже 9 Кбайт, и он просто выполняет именно то, что запрашивает OP. На 0,04% размер ImageMagick.
Джонни, почему

41

На этот вопрос уже дан ответ, но я подумал, что тоже добавлю это. NirCmd (бесплатная, к сожалению, не с открытым исходным кодом) может делать снимки экрана из командной строки в сочетании с многочисленными другими функциями, которые он может выполнять.

Запустите его из командной строки либо в каталоге nircmd.exe, либо, если вы скопировали его в папку system32:

nircmd.exe savescreenshot screen1.png

делает то, что вы хотите. Вы также можете отложить это так:

nircmd.exe cmdwait 2000 savescreenshot screen1.png

Это будет ждать 2000 миллисекунд (2 секунды), а затем захватить и сохранить скриншот.


Nircmdне поддерживает несколько экранов. Он будет захватывать только основной экран.
Томас Уэллер

1
Похоже, последние версии могут сделать несколько экранов. savescreenshotfull [имя файла]
w32sh

Первоначально я не смог найти ссылку для загрузки nircmd2. Поиск в Google ничего не показал. Для пользователей, желающих скачать nircmd2, ссылка для скачивания находится в самом низу страницы nirsoft.net/utils/nircmd.html . Вы можете напрямую использовать эту ссылку для скачивания: nirsoft.net/utils/nircmd.zip
alpha_989

17

это можно сделать без внешних инструментов (вам просто нужно установить .net Framework, который установлен по умолчанию на все, от 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! Это 0,04% от размера ImageMagick (25 Мб). Он использует встроенную функциональность Windows. Меньше, чем все другие решения на этой странице. Лучший!
Джонни, почему

1
Одна вещь, которую я заметил в этом решении, это то, что есть определенные вещи, которые оно не фиксирует. Например, некоторые приложения присоединяются и создают оболочки на других приложениях, которые не отображаются на захваченном изображении. В этих крайних случаях я обнаружил, что MiniCap работает. Тем не менее, в большинстве случаев это решение является самым быстрым и наиболее простым, что вы можете найти.
F1234k

Привет @npocmaka, у меня есть два монитора, на которых установлен рабочий стол. Я хочу сделать скриншот рабочего стола второго монитора. Но ваша программа просто делает скриншоты с основного рабочего стола. Любой трюк?
мини

@mini - вы можете редактировать часть скрипта c #, используя это . Я постараюсь добавить добавить это на выходных
npocmaka

@npocmaka, так как я не знаком с C #, я буду ждать вашего обновления. Большое спасибо.
мини

13

Другие предложения хороши - вы также можете попробовать MiniCap, который является бесплатным и имеет некоторые другие функции, такие как гибкое именование файлов и некоторые другие режимы захвата: http://www.donationcoder.com/Software/Mouser/MiniCap/index.html

(отказ от ответственности: я автор MiniCap).


1
Тогда вы также должны быть автором Screenshot Captor. Я нашел это лучшее решение для моих нужд. Спасибо!
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
Томас Уэллер

Для тех, кто заинтересован в компактности, boxcutter всего 22K для полноэкранного .exe и 502K для обычного .exe. Это с открытым исходным кодом. Прекрасно работает для меня.
frakman1

6

Screenshot-cmd делает снимок экрана рабочего стола или любого окна, выбранного по заголовку окна. Также можно выбрать прямоугольник для захвата. Результат сохраняется в виде файла png. (последнее обновление в 2011 году)

ПАРАМЕТРЫ:
    -WT WINDOW_TITLE
            Выберите окно с этим названием.
            Заголовок не должен содержать пробел ("").
    -Что WINDOW_HANDLE
            Выберите окно по его ручке
            (представляется в виде шестнадцатеричной строки - например, "0012079E") 
    Левая верхняя правая нижняя
            Источник урожая. Если нет WINDOW_TITLE
            (0,0) левый верхний угол рабочего стола,
            иначе, если WINDOW_TITLE сопоставляет окно рабочего стола
            (0,0) это левый верхний угол.
    -О FILENAME
            Имя выходного файла, если его нет, изображение будет сохранено
            как "screenshot.png" в текущем рабочем каталоге.
    -час
            Показывает эту справочную информацию.

Вдохновлено: http://blog.mozilla.com/ted/2009/02/05/command-line-screenshot-tool-for-windows/


1
Это лицензия с открытым исходным кодом, BSD. Очень простой и маленький - для меня это преимущества.
Ярекчек

2

Вы можете использовать Pillowбиблиотеку Python, чтобы делать скриншоты основного монитора.

Шаг 1: установить подушку:

pip install -user pillow

Шаг 2: Сделайте скриншоты со следующим кодом:

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

1
Сначала я попробовал решение imagemagic, но когда я увидел этот фрагмент кода Python, я попробовал его в интерактивном Python CLI, а через секунду я был счастлив! Спасибо!!
Домих

1

Вы можете использовать коммерческий снимок продукта, чтобы делать потрясающие снимки экрана из командной строки.


2
Теперь это коммерческий продукт , нуждается в .NET и не выпущен для Windows 7 ++. Ссылка, приведенная в ответе, возвращает HTTP 404.
Томас Уэллер

Да, репозитория GitHub не существует.
alpha_989
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.