Zrób zrzut ekranu z wiersza polecenia w systemie Windows

51

Szukam sposobu na zrobienie zrzutu ekranu całego ekranu z wiersza poleceń. System operacyjny to Windows. Coś takiego:

C:\>screenshot.exe screen1.png
Željko Filipin
źródło
1
Dlaczego miałbyś chcieć zrobić coś takiego? Poza oczywistym brakiem (możliwość robienia zrzutów ekranu tylko z wiersza poleceń, nad którym aktualnie pracujesz), co jest nie tak z „zwykłymi” rozwiązaniami do tego celu?
Rook
7
Dlaczego miałoby się ograniczać do robienia zdjęć tylko linii cmd? Myślę, że pytanie dotyczy bardziej automatyzacji.
Gerd Klima,
Cóż, w momencie, gdy chce zrobić zrzut ekranu, musi nacisnąć Enter, aby wydać polecenie, prawda? Mógłby oczywiście użyć skryptu, aby go aktywować w czasie, ale potem naprawdę wymyśla gorącą wodę.
Rook
Chciałbym napisać skrypt, który otwiera plik eml w Thunderbirdzie, robi zrzut ekranu, otwiera inny plik, wykonuje kolejny zrzut ekranu ... Dla wszystkich plików w folderze. Chcę uruchomić narzędzie do zrzutów ekranu z wiersza poleceń, aby można je było zautomatyzować. Żeby było jasne, nie chcę robić zrzutu ekranu z linii poleceń, ale z całego ekranu. W rzeczywistości napisałem już scenariusz, po prostu szukam więcej opcji, aby zrobić zrzut ekranu.
Željko Filipin
2
@Idigias: po pierwsze, ekran jest większy niż pole CMD, ale po drugie: kiedy skrypt uruchamia narzędzie GUI, to narzędzie GUI się skupia. Zatem „oczywisty niedobór” nie jest oczywisty i nie ma też niedoboru. Czy kiedykolwiek pracowałeś z linią poleceń?
tvCa

Odpowiedzi:

26

Pobierz imagemagick . Uwzględniono wiele narzędzi do manipulacji obrazami z wiersza poleceń. import pozwala przechwycić część lub całość ekranu i zapisać obraz w pliku. Na przykład, aby zapisać cały ekran jako JPEG:

import -window root screen.jpeg

Jeśli chcesz użyć myszy, aby kliknąć w oknie lub wybrać region ekranu i zapisać plik PNG, użyj:

import box.png
DaveParillo
źródło
13
To nie wydaje się działać w systemie Windows. Otrzymuję błąd serwera X dotyczący nie znalezienia pliku.
Binarny Phile
2
@BinaryPhile Tak, myślę, że działałoby to tylko z serwerem X działającym na Cygwin.
CMCDragonkai
To nadal nie działa dla mnie. Dostaję zrzut ekranu, ale pojawiają się tylko aplikacje X (zgodnie z oczekiwaniami).
reinierpost
hm, ImageMagick ma 25 Mb i robi mnóstwo fajnych rzeczy. screenCapture.bat poniżej ma 9 Kb i po prostu robi dokładnie to, czego zażądał PO. Przy 0,04% wielkości ImageMagick.
John, dlaczego
41

Na to pytanie już udzielono odpowiedzi, ale myślałem, że też w to wrzucę. NirCmd (darmowy, niestety, nie open source) może wykonywać zrzuty ekranu z wiersza poleceń, w połączeniu z wieloma innymi funkcjami, które może wykonywać.

Uruchomienie tego z wiersza poleceń albo w katalogu nircmd.exe, albo jeśli skopiowałeś go do folderu system32:

nircmd.exe savescreenshot screen1.png

robi co chcesz. Możesz również opóźnić w następujący sposób:

nircmd.exe cmdwait 2000 savescreenshot screen1.png

To zaczeka 2000 milisekund (2 sekundy), a następnie uchwyci i zapisze zrzut ekranu.

zacharyliu
źródło
Nircmdnie obsługuje wielu ekranów. Przechwyci tylko ekran główny.
Thomas Weller
1
Wygląda na to, że najnowsze wersje mogą wyświetlać wiele ekranów. savescreenshotfull [nazwa pliku]
w32sh
Początkowo nie mogłem znaleźć linku do pobrania dla nircmd2. Wyszukiwarka Google niczego nie pokazała. Dla użytkowników, którzy chcą pobrać nircmd2, link do pobrania znajduje się na samym dole strony nirsoft.net/utils/nircmd.html . Możesz bezpośrednio użyć tego linku do pobrania: nirsoft.net/utils/nircmd.zip
alpha_989
17

można tego dokonać bez zewnętrznych narzędzi (wystarczy zainstalować .NET Framework, który jest instalowany domyślnie na wszystkich wersjach vista i wyższych) - screenCapture.bat . Jest to samodzielnie skompilowany program w języku C # i możesz zapisać dane wyjściowe w kilku formatach i przechwycić tylko aktywne okno lub cały ekran:

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

Przykłady:

call screenCapture notepad.jpg "Notepad"
call screenCapture screen.png
npocmaka
źródło
2
Zdecydowanie najlepsze rozwiązanie. Super mały 9K! To 0,04% wielkości ImageMagick (25 Mb). Wykorzystuje wbudowane funkcje systemu Windows. Bardziej niż wszystkie inne rozwiązania na tej stronie. Najlepsza!
John, dlaczego
1
Jedną z rzeczy, które zauważyłem w tym rozwiązaniu, jest to, że są pewne rzeczy, których nie wychwytuje. Na przykład niektóre aplikacje dołączają się i tworzą hudy w innych aplikacjach, które nie są renderowane na przechwyconym obrazie. W tych ekstremalnych przypadkach stwierdziłem, że MiniCap działa. W większości przypadków jednak to rozwiązanie jest najszybsze i najbardziej nieskomplikowane, jakie można znaleźć.
F1234k,
Cześć @ npocmaka, mam dwa monitory, na których pulpit jest na nich rozszerzony. Chcę zrobić zrzut ekranu pulpitu drugiego monitora. Ale twój program po prostu robi zrzuty ekranu z głównego pulpitu. Jakaś sztuczka?
mini
@mini - możesz edytować część c # skryptu za pomocą tego . Spróbuję dodać dodaj to w weekend
npocmaka
@ npocmaka, ponieważ nie znam C #, będę czekał na twoją aktualizację. Wielkie dzięki.
mini
13

Inne sugestie są w porządku - możesz także wypróbować MiniCap, który jest bezpłatny i ma kilka innych funkcji, takich jak elastyczne nazewnictwo plików i różne tryby przechwytywania: http://www.donationcoder.com/Software/Mouser/MiniCap/index.html

(wyłączenie odpowiedzialności: Jestem autorem MiniCap).


źródło
1
Musisz być także autorem Screenshot Captor. Znalazłem lepsze rozwiązanie dla moich potrzeb. Dziękuję Ci!
jon3laze
1
Jest bezpłatny tylko do użytku osobistego. Do użytku komercyjnego potrzebna jest licencja na Screenshot Captor.
Thomas Weller
9

Wypróbuj IrfanView .

Możesz go uruchomić za pomocą wiersza polecenia. Możesz określić, które okno ma zostać przechwycone - na przykład całe okno lub tylko bieżące / aktywne okno - i możesz także wykonać podstawowe czynności edycyjne, takie jak wyostrzanie, kadrowanie lub zmiana rozmiaru zdjęć.

Oto opcje wiersza poleceń , szczególnie interesujące

i_view32 /capture=0 /convert=wholescreen.png
John Liu
źródło
6

Możesz wypróbować narzędzie 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
James
źródło
Ten obsługuje wiele monitorów, ale dodaje dodatkowy czarny obszar w wersji 1.5
Thomas Weller
Dla osób zainteresowanych kompaktowością, boxcutter ma tylko 22 KB dla pełnoekranowego pliku .exe i 502 KB dla zwykłego pliku .exe. Jest to oprogramowanie typu open source. Działa świetnie dla mnie.
frakman1
6

Screenshot-cmd wykonuje zrzut ekranu pulpitu lub dowolnego okna wybranego według tytułu okna. Można również wybrać prostokąt do przechwycenia. Wynik jest przechowywany jako plik png. (ostatnia aktualizacja w 2011 r.)

OPCJE:
    -wt WINDOW_TITLE
            Wybierz okno z tym tytułem.
            Tytuł nie może zawierać spacji („”).
    -whH UCHWYT WINDOW
            Wybierz okno za uchwyt
            (reprezentuje jako ciąg szesnastkowy - np. „0012079E”) 
    -rc LEWY GÓRY PRAWY DOLNY
            Źródło uprawy. Jeśli nie podano WINDOW_TITLE
            (0,0) to lewy górny róg pulpitu,
            w przeciwnym razie, jeśli WINDOW_TITLE macuje okno pulpitu
            (0,0) to lewy górny róg.
    -o NAZWA PLIKU
            Nazwa pliku wyjściowego, jeśli nie ma, obraz zostanie zapisany
            jako „screenshot.png” w bieżącym katalogu roboczym.
    -h
            Pokazuje te informacje pomocy.

Inspirowany przez: http://blog.mozilla.com/ted/2009/02/05/command-line-screenshot-tool-for-windows/

Bartek
źródło
1
To jest oprogramowanie typu open source, licencja BSD. Bardzo prosty i mały - dla mnie to zalety.
Jarekczek
2

Możesz użyć Pillowbiblioteki python do robienia zrzutów ekranu głównego monitora

Krok 1: Zainstaluj poduszkę:

pip install -user pillow

Krok 2: Wykonaj zrzuty ekranu z następującym kodem:

from PIL import ImageGrab
img = ImageGrab.grab()
img.save('screenshot.bmp')
alpha_989
źródło
1
Najpierw wypróbowałem rozwiązanie imagemagic, ale kiedy zobaczyłem ten fragment kodu Pythona, wypróbowałem go w interaktywnym CLI Pythona, a po drugie byłem szczęśliwy! Dzięki!!
domih
1

Możesz użyć przystawki produktu komercyjnego, aby robić niesamowite zrzuty ekranu z wiersza poleceń.

Željko Filipin
źródło
2
To jest teraz produkt komercyjny , wymaga platformy .NET i nie został wydany dla systemu Windows 7 ++. Link podany w odpowiedzi zwraca HTTP 404.
Thomas Weller
Tak, repozytorium GitHub nie istnieje.
alpha_989