Kopieren Sie den Screenshot zusätzlich zum Speichern der Datei in die Zwischenablage

6

Unter OS X 10.11.6 Cmd ⌘ Shift ⇧ 4 speichert die Tastenkombination standardmäßig einen Screenshot auf dem Desktop.

Gibt es eine Möglichkeit, die Datei automatisch in die Zwischenablage zu kopieren (zusätzlich zum Speichern der Datei), damit der Screenshot in ein Dokument eingefügt werden kann? Vielleicht gibt es ein paar clevere Gründe, warum man das Bild abschlägt und in die Zwischenablage kopiert?

Die Absicht ist:

  1. Screenshot in eine Datei speichern und
  2. Kopieren Sie den Screenshot in die Zwischenablage

mit einem einzigen Befehl. Beispiele sind immer willkommen.

Gatorback
quelle

Antworten:

6

Das folgende Beispiel zeigt, was ich tun würde, wenn ich beides benötige, um einen Screenshot in die Zwischenablage zu kopieren und gleichzeitig als Datei zu speichern .

Ich würde Automator verwenden , um einen Service 1- Workflow zu erstellen , dem eine Tastenkombination zugewiesen werden könnte, um ein AppleScript- Skript auszuführen , damit diese beiden Ereignisse zusammen auftreten.

In Automator , erstellen einen neuen Dienst 1 mit den folgenden Einstellungen:

  • Dienst empfängt (keine Eingabe) in (jeder Anwendung)
  • Fügen Sie einen Run Apple Aktion , ersetzt den Standardcode
    mit dem Beispiel Applescript - Code weiter unten dargestellt:
  • Speichern Sie den Automator Service 1 wie folgt: Screenshot in Zwischenablage und Datei
  • Weisen Sie eine Verknüpfung in den Systemeinstellungen > Tastatur > Verknüpfungen > Dienste zu :
    •      Screenshot in Zwischenablage und Datei ⇧⌘5 2

Wenn Sie nun ⇧⌘5 2 drücken, erscheint der Fadenkreuzcursor so, als hätten Sie ⇧⌘4 gedrückt. Nachdem Sie die Auswahl jedoch wie gewohnt vorgenommen und die Maustaste losgelassen haben , wird der ausgewählte Bereich in die Zwischenablage kopiert und in einer Datei auf der gespeichert Desktop .


macOS Mojave Update:

  • 1 In macOS Mojave wird ein Dienst in Automator jetzt als Schnellaktion bezeichnet. Wählen Sie diese Option aus.
  • 2 Standardmäßig ist ⇧⌘5 in macOS Mojave einer neuen Screenshot-Funktion zugewiesen . Versuchen Sie es stattdessen mit ⇧⌘6 .

Die Dateinamenskonvention entspricht der Standardkonvention von macOS für Screenshots , die in meiner Region normal gespeichert wurden. Möglicherweise müssen Sie die folgende Codezeile anpassen, damit sie Ihrer Region entspricht:

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

In meiner Region erzeugt dieser Befehl die folgende Beispielausgabe, in der der Wert der theDateTimeNow Variablen wäre, z.

2018-01-13 at 12.04.30 PM

Zwischen der obigen Codezeile und den beiden darauf folgenden Zeilen im Skript erzeugen sie beispielsweise:

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

Im Anschluss haben Sie einen Blick auf die Handbuchseite für beide dateund strftime, um Anpassungen vorzunehmen das Datum und die Uhrzeit formatiert Wert der theDateTimeNow Variable nach Bedarf oder wollte.

Hinweis: Lesen Sie die Kommentare im gesamten Beispiel Applescript - Code , um zu verstehen , was das Skript tut.

Dies wurde unter macOS 10.13.1 getestet und funktionierte für mich ohne Probleme.


Beispiel AppleScript Code :

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

Hinweis: Das Beispiel Applescript - Code oben ist nur , dass und sans die umfassen Fehlerbehandlung keine andere enthält wie kann geeignete / erforderlich / wanted sein, ist die Beweislast , wenn der Benutzer eine beliebige hinzufügen Fehlerbehandlung für jeden Beispielcode vorgestellt und oder Code von sich selbst geschrieben.

user3439894
quelle
1
Diese Lösung hat den Park verlassen: Ich habe den Pfad geändert, damit Screenshots den Desktop nicht überladen. Ich würde denken, dass die Abkürzung Cmd ⌘ + Shift ⇧ + 4 zu dieser Prozedur neu zugewiesen werden könnte. Ich musste den Befehl 'return input' vor der letzten Zeile einfügen, damit das Skript die Datei speichern konnte.
Gatorback
@gatorback, Ja, Sie können den Automator Service Service4 zuweisen, sofern Sie ihn in den Einstellungen für Screenshots deaktivieren oder ändern. Persönlich würde ich ⇧⌘5 nicht wählen, weil es normalerweise noch nicht zugewiesen ist und ich möchte, dass die Standardeinstellung so funktioniert, wie sie soll, aber tun, was für Sie am besten funktioniert. Da der Automator-Dienst auf " Dienst" eingestellt ist, werden keine Eingaben empfangen , und ich kann nicht erkennen, wie das Hinzufügen von return inputElementen zu einem Ergebnis führt. Außerdem hat die Erstellung der Datei, wie codiert, überhaupt nichts mit inputdem AppleScript-Skript zu tun . Welche Version von OS X / macOS verwenden Sie?
user3439894
@gatorback, Du hast gesagt "Diese Lösung wirft es aus dem Park", also hoffe ich, dass Du abstimmst und dies als akzeptierte Antwort markierst. :)
user3439894
Es wäre schön zu verstehen, warum 'return input' notwendig war: Dies war Teil der Boilerplate-Vorlage des Automators, die ich anfangs auskommentierte, weil sie nicht im empfohlenen Skript enthalten war. Obwohl sich der Screenshot ursprünglich in der Zwischenablage befand, wurde der Kommentar zu "return input" erst entfernt und die Datei im Zielverzeichnis gespeichert.
Gatorback
OS X Version 10.11.6
Gatorback