hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programmierung/Entwicklung » AppleScript » Inhalt der Zwischenablage in Variable laden

 



Goar S
Beiträge: 398

25. Jun 2023, 21:11

Beitrag #1 von 6
Bewertung:

(52084 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Guten Tag zusammen,

wenn ich mit Befehl-c etwas in die Zwischenablage kopiere, bekomme ich es mit
Code
set a to the clipboard 

in die Variable a.

Wenn ich anschließend in Safari eine Seite aufrufe und dieses Skript ablaufen lasse,
Code
tell application "Safari" 
activate
end tell

tell application "System Events"
tell process "Safari"
keystroke "a" using command down
keystroke "c" using command down
end tell
end tell
set webText to the clipboard as Unicode text

landet in der Variablen webText der gleiche Inhalt, den ich vorher in die Zwischenablage kopiert habe, obwohl sich jetzt der Text der aktuellen Webseite im Zwischenspeicher befindet; das habe ich kontrolliert über Finder -> Bearbeiten -> Zwischenablage einblenden.

Wenn ich die aktuelle Webseite nicht verändere, sondern lediglich das Skript noch einmal starte, landet der Text der Webseite endlich doch in der Variablen webText.

Das gleiche Verhalten tritt auf, wenn ich mit menu_click den Text der Webseite auswähle und kopiere.
Also auch auf diese Weise landet der kopierte Inhalt erst beim zweiten Skriptlauf in der Variablen

Code
tell application "Safari" to activate 

menu_click({"Safari", "Bearbeiten", "Alles auswählen"})
menu_click({"Safari", "Bearbeiten", "Kopieren"})

Der ganze Trick mit »menu_click«, by Jacob Rus, September 2006:
https://gist.github.com/Xjs/1142026
https://pastebin.com/P1h4bSE9

Kann jemand dieses Verhalten im Umgang mit dem Zwischenspeicher erklären?
Wie kann ich erreichen, dass die kopierten Inhalte schon beim ersten Skriptlauf in der Variablen landen?

Da bin ich neugierig
Goar
---
> iMac 27" 3,2 GHz Intel Core i5, 8 GB, MacOS 10.11.6, QXP 2018, ID CS6 <
> iMac 27" 3,1 GHz Intel 6 Core i5, 16 GB, MacOS 10.15.5, QXP 2019/2020 <
Top
 
X

TMA
Beiträge: 403

10. Jul 2023, 08:23

Beitrag #2 von 6
Beitrag ID: #586374

Bewertung:

(51875 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Hallo Goar,
das Verhalten kann ich dir leider nicht erklären, vielleicht hilft dir dieser Thread aus einem anderen Forum weiter, wo wohl das vorherige Löschen der Zwischenablage in einem ähnlichen Fall für Abhilfe sorgen konnte:
https://www.macscripter.net/...-with-asobjc/74796/2

Gruß
TMA

als Antwort auf: [#586278] Top
 

Goar S
Beiträge: 398

10. Jul 2023, 10:03

Beitrag #3 von 6
Beitrag ID: #586375

Bewertung:

(51860 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Hallo TMA,

hat nicht geklappt.
Ganz gleich, ob ich die Zwischenablage vor Start des Skripts leere oder diese Leerung in das Skript einbaue, beim ersten Skriptlauf ist die Variable webText leer.

Es nützt auch nichts, repeat 2 times um einen der tell-Wickel (System Events oder Safari) zu legen.
Auch hilft es nicht, die einzelnen Elemente oder tell-Wickel des Skripts – oder alle – im Skript mehrmals ablaufen zu lassen: Beim ersten Skriptdurchlauf landet in der Variablen das, was sich vor Skriptstart in der Zwischenablage befunden hat.

Weiterhin neugierig
Goar
---
> iMac 27" 3,2 GHz Intel Core i5, 8 GB, MacOS 10.11.6, QXP 2018, ID CS6 <
> iMac 27" 3,1 GHz Intel 6 Core i5, 16 GB, MacOS 10.15.5, QXP 2019/2020 <

als Antwort auf: [#586374] Top
 

Klaus79 S
Beiträge: 341

16. Jul 2023, 22:29

Beitrag #4 von 6
Beitrag ID: #586395

Bewertung:

(51535 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Moin Goar,

ich habe von Applescript absolut keine Ahnung, aber vielleicht hilft ja trotzdem folgender (theoretischer) Workaround:

Kopiere über das Script und dann schließe das Script (Quit)! Danach rufst Du es erneut auf. Deiner Angabe zufolge müsste jetzt das zuletzt Kopierte in der Zwischenablage sein.

Und den ganzen Vorgang (Kopieren, Schließen, neu Aufrufen) könnte man dann in das Script einbinden (unter VBA wäre das möglich) - oder ein zweites Scrpt aufrufen, dass dann mit der Zwischenablage weiter arbeitet.

Ist natürlich keine Erklärung, aber wenn's funktioniert(?) zumindest eine Lösung ...

Gruß
Klaus

als Antwort auf: [#586375] Top
 

Goar S
Beiträge: 398

17. Jul 2023, 10:16

Beitrag #5 von 6
Beitrag ID: #586402

Bewertung:

(51485 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Hallo Klaus,

mit deinem Vorschlag hast du ins Schwarze getroffen!

Das ursprüngliche menu–click-Skript set_clipboard.scpt habe ich durch eine return-Zeile ergänzt und in einen on-run-Wickel gestellt:

Code
on run webText 
-- Text aus der offenen WebsSeite aufnehmen
tell application "Safari" to activate

menu_click({"Safari", "Bearbeiten", "Alles auswählen"})
menu_click({"Safari", "Bearbeiten", "Kopieren"})

set webText to (the clipboard) as Unicode text
return webText as text
end run

Die Wiedergabe der beiden menu_click-Handler habe ich mir hier ebenfalls gespart, s.o.

In einem neuen Skript, das auf der gleichen Ebene abgelegt ist, rufe ich das Skript set_clipboard.scpt zweimal auf:

Code
-- dieses Skript benutzt das Skriptmodul set_clipboard.scpt 

-- über den Eigenpfad dieses Skripts werden die benötigten Pfade ermittelt
activate
set ownPath to path to as string

set AppleScript's text item delimiters to ":"
set folderPath to (text items 1 thru -2 of ownPath) as string
-- der eigentliche Skriptinhalt ist ausgelagert:
set ascrFile to folderPath & ":" & "set_clipboard.scpt"
set AppleScript's text item delimiters to ""

set ascr to load script file ascrFile
set webText to (run script ascr)
(*
-- um das Ergebnis nach dem ersten Durchlauf zu testen
tell application "BBEdit"
activate
set contents of document 1 to webText
end tell
delay 5
*)
set webText to (run script ascr)

tell application "BBEdit"
activate
set contents of document 1 to webText
end tell

Den Test nach dem ersten Durchlauf habe ich schon auskommentiert.
So klappt es, wunderbar.

Es klappt übrigens nicht mit der keystroke-Version!
Aber dem nachzulaufen fehlt mir jetzt jegliche Motivation.

Vielen Dank
Goar
---
> iMac 27" 3,2 GHz Intel Core i5, 8 GB, MacOS 10.11.6, QXP 2018, ID CS6 <
> iMac 27" 3,1 GHz Intel 6 Core i5, 16 GB, MacOS 10.15.5, QXP 2019/2020 <

als Antwort auf: [#586395]

(Dieser Beitrag wurde von Goar am 17. Jul 2023, 10:18 geändert)
Top
 

Klaus79 S
Beiträge: 341

17. Jul 2023, 15:46

Beitrag #6 von 6
Beitrag ID: #586412

Bewertung:

(51438 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Inhalt der Zwischenablage in Variable laden


Moin Goar,

das freut mich sehr! Und vielen Dank für Dein Feedback.

Gruß aus Hamburg
Klaus

als Antwort auf: [#586402] Top
 


Forenindex » Programmierung/Entwicklung » AppleScript » Inhalt der Zwischenablage in Variable laden

X


^