Copia screenshot negli appunti oltre a salvare il file


6

In OS X 10.11.6, la Cmd ⌘ Shift ⇧ 4 combinazione di tasti salva uno screenshot sul desktop per impostazione predefinita.

C'è un modo per copiare automaticamente il file negli appunti (oltre a salvare il file), in modo che lo screenshot possa essere incollato in un documento? Forse c'è qualche intelligente motivo per collegare e reindirizzare l'immagine negli Appunti?

L'intento è di:

  1. salva screenshot in un file e
  2. copia screenshot negli appunti

con un solo comando. Gli esempi sono sempre apprezzati.

Risposte:


6

Di seguito è riportato un esempio di ciò che farei, se avessi bisogno di entrambi, per posizionare una schermata negli Appunti e salvarla come file contemporaneamente.

Userei Automator per creare un servizio 1 del flusso di lavoro , a cui un tasto di scelta rapida potrebbe essere assegnato, per eseguire un AppleScript di script per avere questi due eventi accadono in congiunzione con l'altro.

In Automator , creare un nuovo servizio 1 con le seguenti impostazioni:

  • Il servizio riceve (nessun input) in (qualsiasi applicazione)
  • Aggiungere un Run AppleScript azione , sostituendo il valore predefinito di codice
    con l' esempio AppleScript di codice mostrato più avanti:
  • Salvare il servizio Automator 1 come, ad esempio: Schermata negli Appunti e File
  • Assegna un collegamento , in Preferenze di Sistema > Tastiera > Collegamenti > Servizi :
    • Schermata negli Appunti e File      ⇧⌘5 2

Ora quando si preme ⇧⌘5 2 il cursore a forma di mirino appare come se si fosse premuto ⇧⌘4 , tuttavia dopo aver effettuato la selezione normalmente e aver rilasciato il mouse, l' area selezionata viene copiata negli appunti e salvata in un file sul Desktop .


aggiornamento macOS Mojave:

  • 1 In macOS Mojave , un servizio in Automator è ora chiamato Quick Action , quindi selezionalo.
  • 2 Per impostazione predefinita, ⇧⌘5 in macOS Mojave è assegnato a una nuova funzione Screenshot, quindi prova invece ⇧⌘6 .

La convenzione di denominazione dei file è quella predefinita di macOS per le schermate salvate normalmente, nella mia regione. Potrebbe essere necessario modificare la seguente riga di codice affinché sia ​​come nella propria regione:

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

Nella mia regione, questo comando produce il seguente esempio di output in cui il valore della theDateTimeNow variabile sarebbe, ad esempio:

2018-01-13 at 12.04.30 PM

Tra la riga di codice sopra e le due righe che lo seguono nello script , producono, ad esempio:

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

In Terminal , dai un'occhiata alla pagina di manuale di entrambi datee strftime, al fine di apportare modifiche per formattare il valore di data e ora della theDateTimeNow variabile , se necessario o desiderato.

Nota: leggi i commenti nel codice AppleScript di esempio in modo da capire cosa sta facendo lo script .

Questo è stato testato sotto macOS 10.13.1 e ha funzionato per me senza problemi.


Esempio di codice AppleScript :

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: L' esempio di codice AppleScript sopra è proprio questo, e senza la gestione degli errori include non include nessun altro come potrebbe essere appropriato / necessario / voluto, l'onere spetta all'utente di aggiungere qualsiasi gestione degli errori per qualsiasi codice di esempio presentato eo codice scritto da se stessi.


1
Questa soluzione la mette "fuori dal parco": ho cambiato il percorso in modo che gli screenshot non ingombrino il desktop. Penserei che la scorciatoia Cmd ⌘ + Maiusc ⇧ + 4 potrebbe essere riassegnata a questa procedura. Avevo bisogno di aggiungere il comando 'return input' prima dell'ultima riga per consentire allo script di salvare il file.
gatorback

@gatorback, Sì, è possibile assegnare il servizio Automator ⇧⌘4 a condizione che sia disabilitato o modificato nelle preferenze di Screen Shot. Personalmente non lo farei e ho scelto ⇧⌘5 perché normalmente non è già assegnato e vorrei che il valore predefinito funzionasse come dovrebbe, tuttavia fare ciò che funziona meglio per te. Poiché Automator Service è impostato su Service non riceve input , non riesco a vedere come l'aggiunta return inputfarà qualcosa. Inoltre, come codificato, la creazione del file non ha nulla a che fare con inputlo script AppleScript. Quale versione di OS X / macOS stai utilizzando?
user3439894,

@gatorback, hai detto "Questa soluzione lo mette fuori dal parco", quindi spero quindi di votare e contrassegnarlo come risposta accettata. :)
user3439894

Sarebbe bello capire perché fosse necessario "input di ritorno": questo faceva parte del modello di boilerplate dell'automatore, che inizialmente ho commentato perché non era nello script raccomandato. Sebbene lo screenshot inizialmente fosse negli appunti, non è stato fino a quando "input di ritorno" non è stato rimosso dal commento e il file è stato salvato nella directory di destinazione.
gatorback

OS X versione 10.11.6
gatorback
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.