Copie la captura de pantalla al portapapeles además de guardar el archivo

4

En OS X 10.11.6, la combinación de teclas Cmd ⌘ Shift ⇧ 4 guarda una captura de pantalla en el escritorio por defecto.

¿Hay una manera de copiar automáticamente el archivo en el portapapeles (además de guardar el archivo), para que la captura de pantalla se pueda pegar en un documento? Tal vez haya alguna razón inteligente para hacer un tee y canalizar la imagen al portapapeles.

La intención es:

  1. guardar captura de pantalla en un archivo y
  2. copiar captura de pantalla al portapapeles

con un comando único . Los ejemplos son siempre apreciados.

    
pregunta gatorback 09.01.2018 - 17:35

1 respuesta

4

El siguiente es un ejemplo de lo que haría, si necesitara ambos, para colocar una captura de pantalla en el portapapeles y guárdalo como un archivo al mismo tiempo.

Utilizaría Automator para crear un Servicio flujo de trabajo , al que se le podría asignar un método abreviado de teclado , para ejecutar un AppleScript script para que estos dos eventos ocurran en conjunto uno con el otro.

En Automator , crea un nuevo Servicio con la siguiente configuración:

  • El servicio recibe (sin entrada) en (cualquier aplicación)
  • Agregar una Ejecutar AppleScript acción , reemplazando el código predeterminado por
    AppleScript código que se muestra a continuación:
  • Guardar el Servicio de automatización como, por ejemplo, Captura de pantalla al Portapapeles y al archivo
  • Asignar un acceso directo , en Preferencias del sistema > Teclado > Accesos directos > Servicios :
    • Captura de pantalla al Portapapeles y archivo ⇧⌘5

Ahora, cuando presiona ⇧⌘5 , el cursor en forma de cruz aparece como si hubiera presionado ⇧⌘4 , sin embargo, después de hacer < em> selection como de costumbre y soltando el mouse, el area seleccionada se copia al portapapeles y se guarda en un archivo en el escritorio .

La convención de nomenclatura de archivos es la de macOS predeterminado para Capturas de pantalla guardadas normalmente, en mi región . Es posible que deba ajustar la siguiente línea de código para que sea como en su región:

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

En mi región, este comando produce la siguiente salida de ejemplo donde el valor de la variable theDateTimeNow sería, por ejemplo:

2018-01-13 at 12.04.30 PM

Entre la línea del código anterior y las dos líneas que lo siguen en el script , producen, por ejemplo:

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

En Terminal , eche un vistazo a la página de manual para date y strftime , a fin de realizar ajustes para dar formato a la fecha y hora valor de la variable theDateTimeNow , según sea necesario o deseado.

Nota: Lea los comentarios a lo largo del ejemplo AppleScript código para para entender lo que hace el script .

Esto se probó en macOS 10.13.1 y funcionó para mí sin problema.

Ejemplo 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: El ejemplo AppleScript código anterior es solo eso, y sans el error de inclusión la gestión no incluye ninguna otra que pueda ser apropiada / necesaria / deseada, la responsabilidad es del usuario agregar cualquier gestión de errores para cualquier código de ejemplo presentado y o código escrito por uno mismo.

    
respondido por el user3439894 13.01.2018 - 04:59

Lea otras preguntas en las etiquetas