Copiar a tela para a área de transferência, além de salvar o arquivo


4

Dentro do OS X 10.11.6, o Cmd Mudança 4 combinação de teclas salva uma captura de tela na área de trabalho por padrão.

Existe uma maneira de copiar automaticamente o arquivo para a área de transferência (além de salvar o arquivo), para que a captura de tela possa ser colada em um documento? Talvez haja algum motivo para tee e canalizar a imagem para a área de transferência?

A intenção é:

  1. salvar captura de tela em um arquivo e
  2. Copiar screenshot para a área de transferência

com um solteiro comando. Exemplos são sempre apreciados.


1
Se tomar o tempo para votar, por favor, faça perguntas para que eu possa aguçar a questão ou editar quaisquer erros
gatorback

1
@ user3439894 Obrigado pelo feedback: indica que preciso esclarecer a questão. Eu concordo: uma pesquisa deve ser realizada antes de fazer uma pergunta. Antes de fazer minha pergunta, pesquisei com o Google, mas não tive sucesso em encontrar uma técnica que permitisse 1) capturar a área 2) capturar no arquivo E 3) copiar para a área de transferência com um único comando.
gatorback

1
Eu não sei se você leu minha resposta ainda, no entanto eu apenas atualizo. Então eu sugiro que você releia.
user3439894

Respostas:


4

O seguinte é um exemplo do que eu faria, se eu precisasse de ambos, para colocar um captura de tela no prancheta e salve-o como um Arquivo ao mesmo tempo.

Eu usaria Automator para criar um Serviço fluxo de trabalho , para o qual um atalho de teclado poderia ser atribuído, para executar um AppleScript roteiro para que esses dois eventos aconteçam em conjunto um com o outro.

Em Automator , crio um novo Serviço com as seguintes configurações:

  • Serviço recebe (sem entrada) em (qualquer aplicativo)
  • Adicionar uma Executar o AppleScript açao , substituindo o padrão código
    com o exemplo AppleScript código mostrado mais abaixo:
  • Salve  a Serviço de Automator como, por exemplo: Captura de tela para área de transferência e arquivo
  • Atribuir uma atalho , em Preferências do Sistema & gt; Teclado & gt; Atalhos & gt; Serviços :
    • Captura de tela para área de transferência e arquivo ⇧⌘5

Agora, quando você pressionar ⇧⌘5 a cursor de cruz aparece como se você tivesse pressionado ⇧⌘4 , no entanto, depois de fazer o seleção como normal e liberando o mouse, o área selecionada é copiado para o prancheta e salvo em um Arquivo no Área de Trabalho .

o convenção de nomenclatura de arquivos é o do Mac OS padrão para Capturas de tela salvo normalmente, na minha região. Pode ser necessário ajustar a seguinte linha de código para que seja como na sua região:

set theDateTimeNow to (do shell script "date \"+%Y-%m-%d at %l.%M.%S %p\"")

Na minha região, esse comando produz o seguinte exemplo de saída, em que valor do theDateTimeNow variável seria, por exemplo:

2018-01-13 at 12.04.30 PM

Entre a linha de código acima e as duas linhas que seguem no roteiro , eles produzem, por exemplo:

Screen Shot 2018-01-13 at 12.04.30 PM.png

Em terminal , dê uma olhada no página man para ambos date e strftime, a fim de fazer ajustes para formatar a data e a hora valor do theDateTimeNow variável , conforme necessário ou desejado.

Nota: Leia o comentários em todo o exemplo AppleScript código de modo a entender o que o roteiro está fazendo.

Isto foi testado sob Mac OS 10.13.1 e trabalhou para mim sem problema.


Exemplo AppleScript código :

on run {input, parameters}

    --  # Screen Shot to Clipboard and File

    --  # Clear the clipboard so the 'repeat until isReady ...' loop works properly.

    set the clipboard to ""

    --  # Copy picture of selected area to the clipboard, press: ⌃⇧⌘4
    --  # Note that on my system I need to keystroke '$' instead of '4'.
    --  # I assume this is because the 'shift' key is being pressed.        

    tell application "System Events"
        keystroke "$" using {control down, shift down, command down}
    end tell

    --  # Wait while user makes the selection and releases the mouse or times out.
    --  # Note that the time out also acts as an escape key press of sorts. In other
    --  # words, if the user actually presses the escape key it has no effect on this
    --  # script like it would if pressing the normal shortcut outside of the script.
    --  #       
    --  # As coded, the time out is 5 seconds. Adjust 'or i is greater than 10' and or  
    --  # 'delay 0.5' as appropriate for your needs to set a different length time out.
    --  # This means, as is, you have 5 seconds to select the area of the screen you
    --  # want to capture and let go of the mouse button, otherwise it times out.

    set i to 0
    set isReady to false
    repeat until isReady or i is greater than 10
        delay 0.5
        set i to i + 1
        set cbInfo to (clipboard info) as string
        if cbInfo contains "class PNGf" then
            set isReady to true
        end if
    end repeat
    if not isReady then
        --  # User either pressed the Esc key or timed out waiting.
        return  --  # Exit the script without further processing.
    end if

    --  # Build out the screen shot path filename so its convention is of 
    --  # the default behavior when saving a screen shot to the Desktop.

    set theDateTimeNow to (do shell script "date \"+%Y-%m-%d at %l.%M.%S %p\"")
    set theFilename to "Screen Shot " & theDateTimeNow & ".png"
    set thePathFilename to POSIX path of (path to desktop folder as string) & theFilename

    --  # Retrieve the PNG data from the clipboard and write it to a disk file.

    set pngData to the clipboard as «class PNGf»
    delay 0.5
    try
        set fileNumber to open for access thePathFilename with write permission
        write pngData to fileNumber
        close access fileNumber
    on error eStr number eNum
        try
            close access fileNumber
        end try
        activate
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
    end try

    --  # Convert the POSIX path filename to an alias.

    set thePathFilename to POSIX file thePathFilename as alias

    --  # Hide the file extension as is the default.

    tell application "Finder"
        try
            set extension hidden of thePathFilename to true
        end try
    end tell

end run

Nota: o exemplo AppleScript código acima é apenas isso, e sem a incluir tratamento de erros não inclui nenhum outro como pode ser apropriado / necessário / desejado, o ônus é sobre o usuário para adicionar qualquer tratamento de erros para qualquer código de exemplo apresentado e ou código escrito pelo próprio.


Esta solução a deixa fora do lugar: eu mudei o caminho para que as imagens não atravessem a área de trabalho. Eu acho que o atalho Cmd ⌘ + Shift ⇧ + 4 poderia ser reatribuído para este procedimento. Eu precisava adicionar o comando 'return input' antes da última linha para habilitar o script para salvar o arquivo.
gatorback

@gatorback, sim, você poderia atribuir o serviço Automator ⇧⌘4 fornecendo-lhe desativar ou alterá-lo nas preferências de captura de tela. Pessoalmente eu não escolheria ⇧⌘5 porque normalmente ainda não está atribuído e gostaria que o padrão funcionasse como deveria, mas faça o que for melhor para você. Como o serviço Automator está configurado para Serviço não recebe entrada , Não consigo ver como adicionar return input vai fazer qualquer coisa. Além disso, como codificado, a criação do arquivo não tem nada a ver com input no script AppleScript. Qual versão do OS X / macOS você está executando?
user3439894

@gatorback, Você disse "Esta solução bate fora do parque", então espero que você vote e marque isso como a resposta aceita. :)
user3439894

Seria bom entender por que 'return input' era necessário: isso era parte do template boilerplate do automator, que eu inicialmente comentei porque não estava no script recomendado. Embora a captura de tela inicialmente estivesse na área de transferência, não foi até que a 'entrada de retorno' tenha sido retirada de comentário e o arquivo tenha sido salvo no diretório de destino.
gatorback

OS X versão 10.11.6
gatorback
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.