GUI-Aktionen ausblenden

L

lucia

Aktives Mitglied
Thread Starter
Dabei seit
04.01.2005
Beiträge
167
Reaktionspunkte
1
Ich habe mir ein kleines Applescript geschrieben, um die CPU Steuerung (Max/Min/Auto) über das Applescript-Menü der Statusleiste einzustellen. Beim Wechsel der Einstellungen zeigt er das Öffnen, das Aufklappen des Menüs usw. an, ich möchte aber, daß dies im Hintergrund geschieht. Wie kann so ein Applescript, das Fenster und Menüs nutzt, für den Anwender unsichtbar ausgeführt werden? (Ich bin Applescript-Anfänger!)

Habe über die Suche nichts finden können, hatte aber auch nicht wirklich gute Ideen für Schlagworte.

Bin für Ratschläge dankbar.
 
hallo,

kann Dir leider bei Deinem problem nicht helfen; jedoch würde mich Dein Script interessieren…:D
Hast Du das so gemacht wie hier: http://www.macosxhints.com/dlfiles/notebook_speed_scpt.txt , oder hast Du eine andere Lösung gefunden? Bei mir geht das Script von macosxhints nämlich nicht…

Grüsse, p-cord.
 
Zuletzt bearbeitet von einem Moderator:
So sieht das aus:


tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.energysaver"
end tell

//* Hier wird die CPU-Einstellung verändert

tell application "System Events"
tell tab group 1 of group 1 of window "Energie sparen" of process "System Preferences"
click radio button "Optionen"
click pop up button 1
pick menu item "Automatisch" of menu of pop up button 1
end tell
end tell

tell application "System Preferences"
quit
end tell


//* ab hier werden die Dateinamen verändert (nicht obligat!)

tell application "Finder"
activate
if document file "CPU Automatisch.scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk exists then
set name of document file "CPU Automatisch.scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk to "CPU Automatisch (aktiv).scpt"
end if
if document file "CPU Minimal (aktiv).scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk exists then
set name of document file "CPU Minimal (aktiv).scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk to "CPU Minimal.scpt"
end if
if document file "CPU Maximal (aktiv).scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk exists then
set name of document file "CPU Maximal (aktiv).scpt" of folder "Scripts" of folder "Library" of folder "..." of folder "Users" of startup disk to "CPU Maximal.scpt"
end if
end tell


Drei Scripts habe ich dieser Art geschrieben. Alle drei befinden sich mit passenden Dateinamen im Ordner für die Scripts. Eines für Max., eines für Min. und eines für Auto. Wenn ich eines anklicke, wird nicht nur die CPU-Einstellung entsprechend verändert, sondern auch ein "(aktiv)" hinter den Dateinamen gehängt, damit ich bereits in der Statusleiste sehe, welche Einstellung gerade aktiv ist. Verstanden?

Gruß.
 
Hi,
danke fürs Script! kann es gerade nicht testen, da ich das ibook nicht hier habe…
aber die Funktionsweise hab ich verstanden; ist im Prinzip das Selbe wie bei macosxhints…
Nur so als grundsätzlicher Ansatz zu Deiner ursprünglichen Frage:
man könnte ja auch über ein Shell-Script über defaults write die Datei com.apple.PowerManagement.plist ändern, dann würde der ganze "fensterkram" wegfallen. fragt sich nur, wie man dem System mitteilt, die Datei neu auszulesen…?!
 
Zuletzt bearbeitet:
Gute Idee,

aber die Datei scheint nicht zwischen "Max" und "Auto" zu unterscheiden, zumindest lautet bei beiden Einstellungen die entsprechende Zeile:

reduce processor speed
0

Nur bei "Min" ändert er in:

reduce processor speed
1

Oder habe ich da was übersehen. Bleibt das Problem - wie von Dir bereits geschildert - den Computer zum Auslesen und umändern der Einstellungen zu zwingen. Oder macht er das von allein alle x Sekunden? Wohl kaum, oder?
 
So; ich hab das jetzt mal gemacht; der befehl lautet pmset (mußte ich erst nochmal nachlesen ;)). Bleibt nur das problem; dasss man immer das Admin-Passwort eingeben muss. Man könnte aber soweit ich weiß, das programm in die sudoers eintragen, dann würde das wegfallen. Weiß aber nicht, wie das geht…:)

edit: Code geändert:
Code:
set the cpu_reduce to 1
display dialog "CPU-Geschwindigkeit: " buttons {"Abbrechen", "Maximal", "Minimal"}
copy the result as list to button_pressed
if the button_pressed is "Abbrechen" then
	quit
end if
if the button_pressed is "Maximal" then
	cpu_reduce = 0
	
end if
if the button_pressed is "Minimal" then
	cpu_reduce = 1
	
end if
try
	do shell script "sudo pmset reduce " & cpu_reduce with administrator privileges
end try

"Automatisch " geht aber leider auch hier nicht; müssen wir mal versuchen, herauszufinden, wie das implementiert ist. Vielleicht weiß es ja auch jemand hier…?
 
Zuletzt bearbeitet:
okay
es muss heissen "sudo pmset reduce 0 dps 1" ;
bin gerade am Überarbeiten, da das o.g. Script nicht wirklich tut…
 
So geht's auch mit "Automatisch"

Code:
set term_script to ""
try
	display dialog "Prozessorgeschwindigkeit setzen auf: " buttons {"Automatisch", "Minimal", "Maximal"} default button "Automatisch"
	copy the result as list to the {knopp}
	
	if the knopp is "Automatisch" then
		
		set term_script to "sudo pmset reduce 0 dps 1"
		
	else if the knopp is "Minimal" then
		
		set term_script to "sudo pmset reduce 1 dps 0"
		
	else if the knopp is "Maximal" then
		
		set term_script to "sudo pmset reduce 0 dps 0"
			
	end if
	-- display dialog term_script
	
	do shell script term_script with administrator privileges
end try
oder um das Passwort zu sparen, in die Datei /etc/sudoers
bei # User privilege specification
folgendes einfügen:
p-cord p-cords_ibook = (root) NOPASSWD: /usr/bin/pmset

(p-cord durch den eigenen Usernamen ersetzen; p-cords_ibook durch den Computernamen…)
Quellen: thinkmacosx, macosxhints
dann geht das folgende Script ohne Passwortabfrage:



Code:
set term_script to ""
try
	display dialog "Prozessorgeschwindigkeit setzen auf: " buttons {"Automatisch", "Minimal", "Maximal"} default button "Automatisch"
	copy the result as list to the {knopp}
	
	if the knopp is "Automatisch" then
		
		set term_script to "sudo pmset reduce 0 dps 1"
		
	else if the knopp is "Minimal" then
		
		set term_script to "sudo pmset reduce 1 dps 0"
		
	else if the knopp is "Maximal" then
		
		set term_script to "sudo  pmset reduce 0 dps 0"
		
		
	end if
	
	
	
	
	do shell script term_script
	
	
end try
 
Zuletzt bearbeitet:
Ich würde mich immer noch über eine Antwort meiner eigentlichen Frage freuen, nämlich ob man ein Applescript ausführen lassen kann, ohne dass der Anwender die Schritte (Öffnen von Fenstern, Menüs aufklappen, etc.) sehen kann.

Danke.
 
lucia schrieb:
Ich würde mich immer noch über eine Antwort meiner eigentlichen Frage freuen, nämlich ob man ein Applescript ausführen lassen kann, ohne dass der Anwender die Schritte (Öffnen von Fenstern, Menüs aufklappen, etc.) sehen kann.

Danke.

Wenn das Zielprogramm AppleScript unterstützt, kannst du alle Aktionen im Hintergrund ausführen lassen. Wird AppleScript nicht unterstützt, bleibt dir nur der Weg über das GUI-Scripting. Hierzu muss das Zielprogramm dann allerdings im Vordergrund sein. AppleScript fungiert dann nicht mehr als objektorientierte Programmiersprache sondern eher als Makrosprache. Beim GUI-Scripting werden nur Mausklicks und Tastatureingaben simuliert - ganz so, als würdest du es gerade per Maus und/oder Tastatur ausführen. Hierbei sind natürlich alle einzelnen Schritte zu sehen.
 
das mit pmset ist klasse.

bin fast fertig mit einer kleinen cocoa-anwendung, die im statusbar ein tag mit menu (min/auto/max) erzeugt und per anklicken wird pmset entsprechend im hintergrund ausgeführt. funktioniert prima, ich muß dem user nur noch die möglichkeit der passworthinterlegung anbieten. vielleicht morgen...

danke und gute nacht.
 
Hi Lucia,

klasse! Wenn Du Lust hast, die Source oder Binary (lieber Source…) hier zu veröffentlichen, würd ich mich freuen! :)

p-cord.
 
Für iMac-G5-Besitzer sind die Reviews nicht berauschend. Bin fast fertig, brauche nur noch einen Hinweis, wie man den aktuellen Pfad der Hauptapplikation in Objective-C abfragen kann, damit ich ein relativ dazu lokalisiertes Icon laden kann. Bin für Tips dankbar, bin neu im Cocoa-Geschäft, mein Buch ist noch nicht da und ich habe zudem im Augenblick wenig Zeit nachzuschauen.

Ich werde hier sofort posten, wenn ich eine lauffähige Version fertig habe. Diese Woche bestimmt!

Gruß.
 
Es ist vollbracht. Will mal jemand ausprobieren. Ich denke da an... hmmm... Du da in der ersten Reihe, wie war gleich Dein Name? p_cord?

Wie stelle ich eine .app hier zur Verfügung?

Gruß.
 
So, habe es mal provisorisch auf meine Seite gestellt:

http://www.losleben.org

Download unter "Losleben".

Viel Spaß. Hoffentlich funktioniert's...
 
Hi Lucia,

bei mir klappts irgendwie gar nicht…Passiert nix.
Wenn ich nur die Unix-datei ausführe kommt was von einem fehlendem ZeroLink.framework… :confused:

Ach ja, könnte es am Tiger liegen?

p-cord.
 
Zuletzt bearbeitet:
wie schade, bei mir (10.3.9) funktioniert es prima! funktioniert schon der pmset als root nicht?

versuch mal pmset -g

Tiger müßte doch die gleichen Terminal-Befehle haben. Mit Frameworks kenne ich mich nicht aus...

Schade
 
Vielleicht wäre es noch eine Idee, wenn Du es bei Dir kompilierst. Schick mal Deine eMail-Adresse. Bin jetzt aber für 4 Tage weg. Danach...
 
pmset -g geht; auch das Skript von mir weiter oben im Thread geht unter Tiger…
Naja, hab Dir mal die email-Adresse geschickt, dann werden wir weitersehen…
 
Zurück
Oben Unten