[GastForen Programmierung/Entwicklung AppleScript 2Ordner_2Files

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

2Ordner_2Files

Anonym
Beiträge gesamt: 22827

8. Okt 2003, 23:48
Beitrag # 1 von 7
Bewertung:
(2279 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

schon wieder was neues,

Info:
Wenn in Photoshop 2 Bilder geöffnet sind, kann ich ein Droplet starten, welches auf das aktive (obere) Bild wirkt.
Ich möchte somit eine RedaktionsSeite (xxx.tif) mit einer Anzeigenseite (yyy.tif) kombinieren.
Am Schluss habe ich eine kombinierte Datei mit Redaktionsseite + Anzeige.
Dies funktioniert bereits, wenn ich beide Dateien öffne, das aktive File die Anzeige ist
und ich anschl. das Droplet starte.

Script-Ablauf:

im Folder "1_red" befindet sich ein File "xxx.tif" - (RedaktionsSeite)
welches als erstes mit Photoshop geöffnet werden sollte.

im Folder "1_anz" befindet sich ebenfalls ein File "yyy.tif" - (AnzeigenSeite)
welches zusätzlich geöffnet wird.

starten des Droplets "red_anz_droplet"

Wie kann ich zwei Files aus unterschiedlichen Ordnern öffnen ?

mein erfolgloser Script-Versuch bisher:

property PSpath : alias "System HDns (Mac OS 9):Adobe Photoshop 7:Adobe Photoshop 7.0:"
property RedPath : alias "System HD:anz-red-mergen:1_red:"
property AnzPath : alias "System HD:anz-red-mergen:1_anz:"

on adding folder items to thisFolder after receiving itemList
 repeat with aFile in itemList
  tell application "Finder" to open file aFile using RedPath
  tell application "Adobe Photoshop 7.0"
  end tell
 end repeat
 repeat with aFile in itemList
  tell application "Finder" to open file aFile using AnzPath
  tell application "Adobe Photoshop 7.0"
   activate
   do script "red_anz_droplet"
  end tell
 end repeat
end adding folder items to

Gruss Willem :-)
X

2Ordner_2Files

Hans Haesler
  
Beiträge gesamt: 5826

9. Okt 2003, 09:15
Beitrag # 2 von 7
Beitrag ID: #418332
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

da ist Einiges durcheinandergeraten … Ich werde versuchen, Erklärungen zu liefern.


Zuerst etwas Grundsätzliches: Das englische Wort "droplet" ist ein Zusammenzug von "to drop" = "fallen" und "to let" = "lassen". Also "fallen lassen". Ein Droplet (auf dem Schreibtisch oder in einem Schubladenordner postiert) wird "gestartet", indem man Objekte auf sein Icon fallenlässt.

Eine andere, weniger bekannte, Möglichkeit: Man bringt das Droplet in einem Ordner von "OSA Menu" unter und "startet" das Droplet indem man den Menüartikel wählt. Damit dies funktioniert muss in den OSA-Menu-Vorgaben die Checkbox "Use Finder to run Applets/Droplets" aktiviert sein. Man kann auch die Checkbox "Run Droplets with Finder selection" aktivieren, um Dateien im Finder auszuwählen und dann das Droplet wieder als Menüartikel zu starten.

Wie "startest" denn Du das Droplet?


Weiter: der Befehl 'tell application "Finder" to open file aFile using RedPath' kann aus zwei Gründen nicht funktionieren.
1) Die Datei 'aFile' ist ein Element der Liste 'itemList', welche erzeugt wird, wenn Dateien in den überwachten Ordner gelangen (= 'after receiving itemList').
2) Statt 'using RedPath' muss 'using PSpath' gebraucht werden, weil dem Finder gesagt wird, er solle die Datei 'aFile' öffnen, indem er dazu das Programm verwendet, welches im Pfad 'PSpath' definiert ist. Dieser Workaround ist notwendig für Photoshop 6 (und älter). Photoshop 7 sollte eigentlich seine Dateien selber öffnen können.


Weil wir schon festgestellt haben, dass der Aufruf einer Photoshopaktion aus einer Ordneraktion heraus nur bedingt funktioniert und weil das gleichzeitige Fallenlassen von zwei Dateien aus zwei verschiedenen Ordnern unmöglich ist, muss die Sache anders angepackt werden.

Die Pfade 'Red' und 'Anz' mit den Bildnamen ergänzen. Dem Finder (oder Photoshop selber) sagen, dass er die Bilder öffnen soll. Dann die Photoshopaktion aufrufen.

Also kein Droplet starten und keine Ordneraktion anhängen. Das folgende Script im OSA Menu unterbringen. Oder, als Applikation gesichert, mit einem Doppelklick starten:
---
property PSpath : alias "System HDns (Mac OS 9):Adobe Photoshop 7:Adobe Photoshop 7.0:"
property RedPath : alias "System HD:anz-red-mergen:1_red:xxx.tif"
property AnzPath : alias "System HD:anz-red-mergen:1_anz:yyy.tif"

tell application "Finder" to open file RedPath using PSpath
tell application "Finder" to open file AnzPath using PSpath
tell application "Adobe Photoshop 7.0"
   activate
   do script "red_anz_droplet"
end tell
---
Der Befehl 'do script' richtet sich an das Photoshop-Script und nicht an ein eventuell existierendes Droplet.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418331]

2Ordner_2Files

Anonym
Beiträge gesamt: 22827

9. Okt 2003, 21:43
Beitrag # 3 von 7
Beitrag ID: #418333
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich Danke Dir für die ausführliche Antwort und Dein Script,
du hast recht, ich hab mich vertan, es ist kein Photoshop-Droplet sondern eine Photoshop-Aktion.

Dein Script funktioniert einwandfrei,
ich verschiebe die Dateien in die Ordner und starte das Script
als Ergebnis erhalte ich dann die Photoshop-Montage.

Frage:
Zu den Namen (xxx.tif + yyy.tif), ich muss die zwei Dateien vorher stets umbenennen.
Kann man da was mit Variablen machen?
Da ich nach der Aktion die Ursprungsdaten lösche, liegt immer nur eine Datei im jeweiligen Ordner.

Gruss Willem


als Antwort auf: [#418331]

2Ordner_2Files

Hans Haesler
  
Beiträge gesamt: 5826

9. Okt 2003, 23:59
Beitrag # 4 von 7
Beitrag ID: #418334
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

ja, kein Problem. Dazu braucht es zunächst drei Änderungen in den beiden Properties 'RedPath' und 'AnzPath':
1) 'property' durch 'set' und den Doppelpunkt durch 'to' ersetzen
   (weil sonst nichts mehr geht, wenn mal das Script bei leerem Ordner gestartet wird).
2) Den Ausdruck 'alias' löschen (weil man später den Dateinamen anhängen muss).
3) Die Dummy-Dateinamen auch löschen.

Dann muss man mit dem Befehl 'list folder' den Inhalt der beiden Ordner erfragen. Der Zusatz 'with invisibles' sorgt dafür, dass das unsichtbare Icon, welches sonst als ...
---
"Icon
"
--- ... mit Return(!) in der Liste auftauchen würde, ignoriert wird. Die Liste wird also im Normalfall 1 Element aufweisen. Anschliessend werden die beiden Pfade komplettiert: Der Pfad zum Ordner und der Name des ersten Elementes der entsprechenden Liste werden zusammengesetzt und in ein Alias verwandelt.

Ich habe je die zwei Zeilen 'Red' und 'Anz' zusammengefasst und in einen 'try wrapper' gewickelt. Es könnte ja sein, dass der Willem mal vergisst, ein Bild nachzuschieben ;-). Die 'flags' 'red' und 'anz' werden auf '1' gesetzt, wenn nicht vorher ein Fehler generiert wird.
---
property PSpath : alias "System HDns (Mac OS 9):Adobe Photoshop 7:Adobe Photoshop 7.0:"
set RedPath to "System HD:anz-red-mergen:1_red:"
set AnzPath to "System HD:anz-red-mergen:1_anz:"
set red to 0
set anz to 0

try
  set RedList to list folder RedPath without invisibles
  set RedPath to alias (RedPath & item 1 of RedList)
  set red to 1
end try

try
  set AnzList to list folder AnzPath without invisibles
  set AnzPath to alias (AnzPath & item 1 of AnzList)
  set anz to 1
end try

if red = 1 and anz = 1 then
  tell application "Finder" to open file RedPath using PSpath
  tell application "Finder" to open file AnzPath using PSpath
  try
    tell application "Adobe Photoshop 7.0"
      activate
      do script "red_anz_droplet"
    end tell
  end try
else
  display dialog "Die Bilder sind nicht bereit." buttons "OK" default button 1 with icon 0
  error number -128
end if
---
Der Test 'if red = 1 and anz = 1' prüft, ob die beiden 'flags' aktiviert sind und gibt dann den Rest des Scripts frei. Wenn einer der 'flags' auf '0' geblieben ist, dann wird der Dialog gezeigt. problematisch wird es, wenn der Finder versuchen muss, eine Nicht-Bild-Datei zu öffnen. Ein 'try wrapper' wird ignoriert. Deshalb sind die folgenden Befehle damit "geschützt".

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418331]

2Ordner_2Files

Anonym
Beiträge gesamt: 22827

10. Okt 2003, 21:26
Beitrag # 5 von 7
Beitrag ID: #418335
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für das Script und die ausführliche Erklährung, willem ist begeistert
aber vergisst manchmal die alten, abgearbeiteten Daten zu verschieben.

Frage:
Kann man die beiden abgearbeiteten Files anschließend in den Ordner "Backup" verschieben, damit die Ordner "1_anz" und "1_red" für die nächste Aktion wieder leer sind?

Gruss und Danke
willem


als Antwort auf: [#418331]

2Ordner_2Files

Hans Haesler
  
Beiträge gesamt: 5826

10. Okt 2003, 22:18
Beitrag # 6 von 7
Beitrag ID: #418336
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

jetzt wird es schwierig für mich, weil ich nicht weiss, wie Deine Photoshop-Aktion genau abläuft und vor allem wieviel Zeit sie beansprucht. Ich nehme mal an, dass die beiden Bilder am Schluss des Scripts geschlossen werden.

Damit die Dateien nicht zu früh kopiert werden, habe ich den Befehl 'delay' eingebaut. Die Zahl 5 dahinter bedeutet, dass das Script für 5 Sekunden den Atem anhält. Die Maschine wird dabei nicht gebremst. Aber ich bin ziemlich sicher, dass die Dateien problemlos sofort, d.h. ohne diese Kunstpause, verschoben werden können. Auch wenn die Aktion noch nicht beendet ist.

Die folgende Definition des Backup-Pfades als vierte Zeile des Scripts einfügen. Wenn der Backup-Ordner woanders liegt, muss der Pfad natürlich entsprechend angepasst werden:
Code
set BkpPath to "System HD:anz-red-mergen:Backup:" 

Und hier der Schluss des Scripts (die Zeilen nach dem 'end try' der Photoshop-Aktion durch die folgenden ersetzen):
---
  delay 5
  try
    tell application "Finder" to move file RedPath to folder BkpPath
  end try
  try
    tell application "Finder" to move file AnzPath to folder BkpPath
  end try
else
  display dialog "Die Bilder sind nicht bereit." buttons "OK" default button 1 with icon 0
  error number -128
end if
---
Wie schon erwähnt: versuche zuerst, das Script zu starten wenn die Zeile 'delay' deaktiviert ist. Mit zwei Strichen (= --).

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418331]

2Ordner_2Files

Anonym
Beiträge gesamt: 22827

11. Okt 2003, 12:30
Beitrag # 7 von 7
Beitrag ID: #418337
Bewertung:
(2278 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
es funktioniert, da Photoshop - sobald die Dateien geöffnet sind - die Quelldaten nicht mehr benötigt.

Danke Dir Hans


als Antwort auf: [#418331]
X