Tire uma captura de tela da linha de comando no Windows

51

Estou procurando uma maneira de tirar uma captura de tela de toda a tela na linha de comando. O sistema operacional é o Windows. Algo assim:

C:\>screenshot.exe screen1.png
Željko Filipin
fonte
11
Por que você gostaria de fazer algo assim? Além da deficiência óbvia (ser capaz de capturar capturas de tela apenas da linha de comando em que você está trabalhando), o que há de errado com as soluções "regulares" para esse fim?
Rook
7
Por que seria restrito tirar uma foto apenas da linha cmd? Eu acho que a questão vai mais ao longo das linhas de automação.
Gerd Klima
Bem, no momento em que ele quer tirar uma captura de tela, ele precisa pressionar enter para dar o comando, não é? É claro que ele poderia usar um script para ativá-lo no tempo, mas então ele está realmente reinventando a água quente.
Rook
Eu gostaria de escrever um script que abra o arquivo eml no Thunderbird, faça uma captura de tela, abra outro arquivo, faça outra captura de tela ... Para todos os arquivos em uma pasta. Quero executar a ferramenta de captura de tela na linha de comando, para que possa ser automatizada. Só para esclarecer, não quero tirar uma captura de tela da linha de comando, mas de toda a tela. Na verdade, eu já escrevi o roteiro, só estou procurando mais opções para tirar a captura de tela.
Željko Filipin
2
@Idigias: em primeiro lugar, a tela é maior que uma caixa CMD, mas em segundo lugar: quando um script lança uma ferramenta GUI, essa ferramenta GUI fica em foco. Portanto, sua "deficiência óbvia" não é óbvia e também não existe. Você já trabalhou com linha de comando?
TvCa

Respostas:

26

Faça o download do imagemagick . Muitas ferramentas de manipulação de imagem de linha de comando estão incluídas. A importação permite capturar parte ou toda a tela e salvar a imagem em um arquivo. Por exemplo, para salvar a tela inteira como um JPEG:

import -window root screen.jpeg

Se você deseja usar o mouse para clicar dentro de uma janela ou selecionar uma região da tela e salvar um png, basta usar:

import box.png
DaveParillo
fonte
13
Isso não parece funcionar no Windows. Eu recebo um erro do servidor X sobre o arquivo não encontrado.
Php binário
2
@BinaryPhile Sim, acho que isso funcionaria apenas com um servidor X rodando no Cygwin.
CMCDragonkai
Ainda não funciona para mim. Recebo uma captura de tela, mas apenas os aplicativos X são exibidos (conforme o esperado).
reinierpost
hm, o ImageMagick tem 25 Mb e faz MUITAS coisas legais. screenCapture.bat, abaixo, tem 9 Kb e simplesmente faz exatamente o que o OP solicitou. Em 0,04% do tamanho do ImageMagick.
johny why
41

Esta pergunta já foi respondida, mas pensei em incluir isso também. O NirCmd (infelizmente, não é de código aberto) pode tirar capturas de tela da linha de comando, em conjunto com as inúmeras outras funções que ele pode executar.

Executando isso na linha de comando, no diretório nircmd.exe ou se você o copiou para a pasta system32:

nircmd.exe savescreenshot screen1.png

faz o que você quer. Você também pode atrasá-lo assim:

nircmd.exe cmdwait 2000 savescreenshot screen1.png

Isso irá esperar 2000 milissegundos (2 segundos) e, em seguida, capturar e salvar a captura de tela.

zacharyliu
fonte
Nircmdnão suporta várias telas. Ele capturará apenas a tela principal.
Thomas Weller
11
Parece que as versões recentes podem fazer várias telas. savescreenshotfull [nome do arquivo]
w32sh 26/02
Não consegui encontrar o link para download do nircmd2 inicialmente. A pesquisa do Google não mostrou nada. Para usuários que desejam fazer o download nircmd2, o link para download está localizado na parte inferior da página nirsoft.net/utils/nircmd.html . Você pode usar diretamente este link para download: nirsoft.net/utils/nircmd.zip
alpha_989
17

isso pode ser feito sem ferramentas externas (você só precisa instalar o .net framework, que é instalado por padrão em tudo, desde o Vista e acima) - screenCapture.bat . É um programa C # auto-compilado e você pode salvar a saída em poucos formatos e capturar apenas a janela ativa ou a tela inteira:

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

Exemplos:

call screenCapture notepad.jpg "Notepad"
call screenCapture screen.png
npocmaka
fonte
2
Definitivamente a melhor solução. Super-minúsculo 9K! Isso corresponde a 0,04% do tamanho do ImageMagick (25 Mb). Ele usa a funcionalidade interna do Windows. Mais fina do que todas as outras soluções nesta página. Melhor!
Johny por
11
Uma coisa que notei sobre esta solução é que existem coisas específicas que ela não captura. Por exemplo, alguns aplicativos estão se anexando e criando huds em outros aplicativos que não são renderizados na imagem capturada. Nesses casos extremos, descobri que o MiniCap funciona. Na maioria dos casos, porém, esta solução aqui é a mais rápida e simples que você pode encontrar.
F1234k
Oi @ npocmaka, tenho dois monitores que a área de trabalho é estendida neles. Quero tirar uma captura de tela da área de trabalho do segundo monitor. Mas seu programa apenas captura capturas de tela da área de trabalho principal. Algum truque?
mini
@mini - você pode editar a parte c # do script usando isso . Vou tentar adicionar isso no final de semana
npocmaka
@ npocmaka, como não estou familiarizado com C #, estarei aguardando sua atualização. Muito obrigado.
mini
13

Outras sugestões são boas - você também pode experimentar o MiniCap, que é gratuito e possui outros recursos, como nomeação flexível de arquivos e alguns modos de captura diferentes: http://www.donationcoder.com/Software/Mouser/MiniCap/index.html

(aviso: sou o autor do MiniCap).


fonte
11
Então você também deve ser o autor do Screenshot Captor. Eu achei uma solução melhor para minhas necessidades. Obrigado!
Jon3laze
11
É gratuito apenas para uso pessoal. Para uso comercial, é necessária uma licença para o Screenshot Captor.
Thomas Weller
9

Experimente o IrfanView .

Você pode executá-lo via linha de comando. Você pode especificar qual janela capturar - como a janela inteira ou apenas a janela atual / ativa - e também pode fazer algumas edições básicas, como aprimorar, cortar ou redimensionar as imagens.

Aqui estão as opções da linha de comando , particularmente interessante é

i_view32 /capture=0 /convert=wholescreen.png
john liu
fonte
6

Você pode tentar a ferramenta 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
fonte
Este suporta múltiplos monitores mas acrescenta alguma área preta extra na versão 1.5
Thomas Weller
Para os interessados ​​em compacidade, o boxcutter é de apenas 22K para o .exe em tela cheia e 502K para o .exe comum. É de código aberto. Funciona muito bem para mim.
frakman1
6

Screenshot-cmd captura uma captura de tela de uma área de trabalho ou de qualquer janela selecionada pelo título da janela. Também é possível selecionar retângulo para capturar. O resultado é armazenado como um arquivo png. (última atualização em 2011)

OPÇÕES:
    -wt WINDOW_TITLE
            Selecione a janela com este título.
            O título não deve conter espaço ("").
    -wh WINDOW_HANDLE
            Selecionar janela por sua alça
            (representado como sequência hexadecimal - fe "0012079E") 
    -rc INFERIOR ESQUERDO SUPERIOR DIREITO
            Fonte de colheita. Se nenhum WINDOW_TITLE for fornecido
            (0,0) fica no canto superior esquerdo da área de trabalho,
            caso contrário, se WINDOW_TITLE usar uma janela da área de trabalho
            (0,0) é o canto superior esquerdo.
    -o FILENAME
            Nome do arquivo de saída, se não houver, a imagem será salva
            como "screenshot.png" no diretório de trabalho atual.
    -h
            Mostra essas informações de ajuda.

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

Bartek
fonte
11
Este é um código aberto, licença BSD. Muito simples e pequeno - para mim, essas são vantagens.
Jarekczek
2

Você pode usar a Pillowbiblioteca python para fazer capturas de tela do monitor principal

Etapa 1: instalar travesseiro:

pip install -user pillow

Etapa 2: tire capturas de tela com o seguinte código:

from PIL import ImageGrab
img = ImageGrab.grab()
img.save('screenshot.bmp')
alpha_989
fonte
11
Primeiro, tentei a solução imagemagic, mas, quando vi esse código Python, tentei em uma CLI interativa do Python e, um segundo depois, fiquei feliz! Valeu!!
domih 30/07/2018
1

Você pode usar o snapit do produto comercial para tirar capturas de tela impressionantes na linha de comando.

Željko Filipin
fonte
2
Agora, este é um produto comercial , precisa do .NET e não foi lançado para o Windows 7 ++. O link fornecido na resposta retorna HTTP 404.
Thomas Weller
Sim, o repositório GitHub não existe.
Alpha_989