Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Folker •---->


Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
|
Verfasst am: 26.05.2007 - 19:39 Titel: System Events als Finder-Ersatz (bzw. info for) |
|
|
Als nicht gerade großer Fan von "Finders" AppleScript-Künsten (jaja, wer seit 1995 AppleScriptet hat so manche leidvolle Erfahrung, angefangen bei der Geschichte mit dem Programm Scriptable Finder [hieß das so?], der zu AppleScripts Anfangszeiten nämlich noch kein AppleScript verstand, bis hin zu manchen Bugs [manch' Befehl konnte den Finder für Sekunden in Winterstarre befördern]) suche ich natürlich immer Wege den guten alten Finder zumindest beim AppleScripten zu umgehen. Auch der Befehl info for kommt mir seit einiger Zeit als Auslaufmodell vor - obwohl ich diesen immer gerne benutzt habe. So habe ich zuletzt mal ein bisschen mit den System Events herumgepröbelt. Im Folgenden einige Ergebnisse dieser Bemühungen, wobei ich natürlich auch nicht weiß, ob es mit der nächsten Version von AS noch funktioniert! (version "1.10.7")
--existiert ein item schon am Zielort?
set theItem to ((path to documents folder from user domain) as text) & "Testdatei.txt"
check_Name(theItem)
-- true or false
on check_Name(theItem)
tell application "System Events"
return (item theItem exists)
end tell
end check_Name
(*
get_ItemClass trifft es nicht so ganz - hier wird nur abgefragt, ob das Zielobjekt
ein Ordner ist (true), alle anderen Items, auch packages, werden mit false zurückgegeben
*)
set theItem to choose file
--set theItem to choose folder
get_ItemClass(theItem)
on get_ItemClass(theItem)
tell application "System Events"
return (class of item (theItem as text) is folder)
end tell
end get_ItemClass
-- eine Art list folder mit System Events realisiert
-- es werden nur sichtbare Objekte zurückgegeben!
set theItem to choose folder
get_ItemList(theItem, {})
-- liste mit Dateiverweisen in Pfadform
on get_ItemList(theItem, TheL)
tell application "System Events"
set temp to every item of theItem
repeat with i in temp
if (visible of i) then set end of TheL to (path of i) as alias
end repeat
return TheL
end tell
end get_ItemList
-- Gibt den Namen einer Datei (mit Extension) und die Extension separat zurück
set theItem to choose file
get_Name(theItem)
-- {"vollständiger Name", "Extension"}
on get_Name(theItem)
tell application "System Events"
return {name of theItem, name extension of theItem}
end tell
end get_Name
--Das geht natürlich auch für den kompletten Dateipfad
set theItem to choose file
get_FilePath(theItem)
-- {"vollständiger Dateipfad"}
on get_FilePath(theItem)
tell application "System Events"
return {path of theItem}
end tell
end get_FilePath
-- Naja, über Sinn und Unsinn des folgenden 'Path zum Item' lässt sich diskutieren
-- ist aber ganz praktisch handzuhaben
set theItem to choose file
set theItem to choose folder
get_Path(theItem)
on get_Path(theItem)
tell application "System Events"
set thePath to path of theItem
if (package folder of theItem) or (class of item (theItem as text) is folder) then
set x to -3
else
set x to -2
end if
end tell
set {oldDelims, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {":"}}
set thePath to (text items 1 thru x of (theItem as text)) as text
set AppleScript's text item delimiters to oldDelims
return thePath
end get_Path
---Das Umbennen habe ich ganz vergessen anzuhängen:
on set_Name(theItem, theNewName)
tell application "System Events"
set name of theItem to theNewName
return {theItem, name of theItem}
end tell
end set_Name
Allerdings erzeugt der Befehl set name keinen error bei vorhanden sein eines Objekts gleichen Namens im gleichen Ordner - der Befehl wird schlicht ignoriert - daher lasse ich gleich den neuen Namen mit zurückgeben und kann daraufhin überprüfen, ob er identisch mit dem beabsichtigten neuen Namen ist - sonst error "Blah" number 31960
Edit: In Bunt zur besseren Lesbarkeit ( ) _________________ Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign |
|
Nach oben |
|
 |
spirigwi •----->


Anmeldedatum: 10.07.2003 Beiträge: 1517 Wohnort: Olten-CH
|
Verfasst am: 14.07.2007 - 10:11 Titel: |
|
|
tell application "Finder" to set Sel to selection as alias as text
return Sel -->ZB "[Startup-Disk]:Users:[der user]:Desktop:test.txt"
weil dies so blitzschnell herrliche Ergebnisse über komplizierteste Pfade liefert,
Frage: gibst sowas auch in deinen "System Events"? (und fürchte dabei etwas verwechselt zu haben...) _________________ Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.07.2007 - 13:20 Titel: |
|
|
Hast du schon mal "System Events" als aktives Programm gesehen? Also ich nicht. - System Events arbeitet immer unsichtbar und somit kannst du in diesem Programm auch nichts selektieren.
Desweiteren hilft ein kleiner Blick ins Funktionsverzeichnis. Beim Finder wirst du den Befehl "select" in der Standard Suite finden, bei System Events jedoch nicht.
Außerdem lässt sich so etwas ja durch einen einfachen Test feststellen:
tell application "System Events" to set Sel to selection _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Folker •---->


Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
|
Verfasst am: 16.07.2007 - 08:01 Titel: |
|
|
Hallo Willy,
Snow hat die Antwort ja schon gegeben - das geht nicht! Die Auswahl eines (Finder-)Items ist ja auch eher eine programmspezifische Funktion des Finders, welcher ja nichts anderes als ein Programm darstellt. Ebenso wenig können Dir die System Events einen Datensatz im FileMaker auswählen.
Gruß, Folker _________________ Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign |
|
Nach oben |
|
 |
spirigwi •----->


Anmeldedatum: 10.07.2003 Beiträge: 1517 Wohnort: Olten-CH
|
Verfasst am: 30.07.2007 - 03:17 Titel: |
|
|
als Ergänzung, wenn jemand das choose umgehen will (dieses muss spezifiziert werden auf: files oder Ordner oder Alias)
Man hat also einen String des Pfades vor sich und sucht nun den Namen:
set TESTERPfadString to "HD:Users:UserOrdner:Documents:TESTER.doc"
set theItem to alias TESTERPfadString --<nur Variablen, sonst sucht beim Kompiliervorgang
get_Name(theItem)
on get_Name(theItem)
tell application "System Events"
return {name of theItem, name extension of theItem}
end tell
end get_Name _________________ Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius |
|
Nach oben |
|
 |
sdenjuopl148 •---->

Anmeldedatum: 17.12.2022 Beiträge: 725 Wohnort: New York city
|
|
Nach oben |
|
 |
sdenjuopl148 •---->

Anmeldedatum: 17.12.2022 Beiträge: 725 Wohnort: New York city
|
|
Nach oben |
|
 |
anthonyscotte23 •->

Anmeldedatum: 06.03.2023 Beiträge: 4
|
|
Nach oben |
|
 |
|