| 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 |  | 
	
		|  | 
	
		|  |