0 votos

Solución de problemas de captura de pantalla de secuencia de comandos

De FONDO

Un script de Automator para guardar una captura de pantalla a un archivo fue desarrollado (por alguien más inteligente que yo). Por alguna razón que no fiable (rara vez) guarda la captura de pantalla en el archivo. El código que se presenta a continuación.

La captura de pantalla del cursor constantemente lleva a cabo cuando se llama: la captura de pantalla es capturado en la memoria. En contraste, la captura de pantalla es que no siempre guardan en el archivo codificado como a continuación

PREGUNTAS

  • ¿Cómo puede la causa root de la guarda problema se diagnostica?
  • Hay evidentes errores en el código que causa el guardar problema?
  • Hay un problema de permisos? Cómo confirmar / prueba?

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
    set thePathFilename to "/Users/user/Documents/Captures/" & 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

    --  # Hide the file extension as is the default.
    --  # Convert the POSIX path filename to an alias.

    set thePathFilename to POSIX file thePathFilename
    set thePathFilename to thePathFilename as alias
    tell application "Finder"
        try
            set extension hidden of thePathFilename to true
        end try
    end tell


    return input
end run

1voto

qarma Puntos 71

Para el beneficio de otros lectores, vale la pena señalar que el Buscador ha incorporado atajos de teclado que te permitirá:

  • 3: tomar una captura de pantalla de una selección y guardarlo en el portapapeles;
  • 4: tomar una captura de pantalla de una selección y guardarlo en un archivo.

Usted puede modificar estos accesos directos en Preferencias del Sistema > Teclado > accesos directos > Capturas de Pantalla.

He puesto una sugerencia en los comentarios acerca de cómo diagnosticar el guión original. Pero, como me gustaría haber escrito el guión de forma ligeramente diferente, si yo quería (por alguna razón) para evitar el uso de la builtin Buscador de atajos de teclado, me fui por delante y escribió:

    set screenshots to do shell script "defaults read com.apple.screencapture location"
    set timestamp to do shell script "date +'%Y-%m-%d at %H.%M.%S'"
    set type to "jpg" -- or "png"
    set filename to ["Screen Shot ", timestamp, ".", type] as text

    do shell script "SCREENCAPTURE -ioac -t " & type
    set [imgdata] to (the clipboard) as list

    tell application "Finder"
        set screenshot to (make new file ¬
            at POSIX file screenshots as alias ¬
            with properties {name:filename}) as alias

        write the imgdata as class of imgdata to the screenshot

        reveal the screenshot
    end tell

Sistema de información: AppleScript versión: "2.7", versión del sistema: "10.13.4"

Por un lado, el guión es más corto, más corto y las secuencias de comandos proporcionan menos lugares donde las cosas pueden ir mal. En la actualidad, este script funciona bien en mi sistema. Por lo tanto, usted puede probarlo en el tuyo a ver si funciona; si no, Editor de secuencias de Comandos le informe donde se producen los errores y lo que ellos son, por ejemplo, si se trata de un archivo de error de permisos, etc.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X