1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript der Woche -- Fenster maximieren

Dieses Thema im Forum "AppleScript" wurde erstellt von michaelbach, 05.02.06.

  1. michaelbach

    michaelbach Roter Seeapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.109
    Hier war schon einmal danach gefragt worden: Fenster maximieren wie das in einem anderen Betriebssystem geht, das wir hier nicht nennen wollen. Nun, nicht unbedingt maximieren, aber wenigstens in der Höhe voll und rechts unter zumindest unter Berücksichtigung der Dockbreite oder auf z.B. 900 Pixel -- je nachdem welche Bildschirmgröße man hat.
    Wem das gefällt, der kann es z.B. direkt in Butler einbauen (man kann da ja neuerdings direkt AS-Quellcode drin stehen haben) und dann per heißer Taste (bei mir ^M) aktivieren. Ich find's irre praktisch.
    Das ganze Skript ist erstaunlich lang geworden, weil nicht alle Leute das Dock rechts haben ;), und weil (natürlich) M$-Programme anders sind…
    Ach ja, damit's geht muss "Universal Access>Enable access for assistive devices" (oder wie immer das auf Deutsch heißt) aktiv sein.
    Code:
    --	2006-02-05	(Nearly) Maximize front window
    --	best run from Butler, or Quicksilver for that matter
    --	©2006 Michael Bach <www.michaelbach.de>, building on ideas from many colleagues
    --	special treatment for incompatible programs only done for Word so far
    
    
    -- line below to be customized by you
    set rightEdgeOfWindow to -1 -- negative values will set the window to the full screen size (minus Dock)
    set rightEdgeOfWindow to 900 --   <—— this will depend on your taste and your display size
    -- end of easily customizable part
    
    
    set menubarHeight to 22
    set screenHeight to (word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height")) as number
    set yTop to menubarHeight
    set yBottom to screenHeight
    set xLeft to 0
    set xRight to (word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width")) as number
    
    tell application "System Events"
    	set frontProcessName to name of first application process whose frontmost is true
    	tell list 1 of process "Dock"
    		set dockOrientation to orientation
    		set dockPositionRecord to position
    		set dockSizeRecord to size
    	end tell
    	set dockXLeft to (item 1 of dockPositionRecord)
    	set dockYTop to (item 2 of dockPositionRecord)
    	set dockWidth to (item 1 of dockSizeRecord)
    	set dockHeight to (item 2 of dockSizeRecord)
    	if dockOrientation = "AXHorizontalOrientation" then
    		set yBottom to yBottom - dockHeight -- need to leave room for dock at bottom
    	else
    		if dockOrientation = "AXVerticalOrientation" then
    			if dockXLeft < 2 then -- dock is at left side of screen
    				set xLeft to dockWidth
    			else -- dock is at right side of screen
    				set xRight to xRight - dockWidth
    			end if
    		end if
    	end if
    end tell
    if (rightEdgeOfWindow > 0) then set xRight to min(xRight, rightEdgeOfWindow)
    if (frontProcessName = "Finder") then set menubarHeight to 44
    
    if (frontProcessName = "Microsoft Word") then
    	set xLeft to xLeft + 1
    	set yTop to yTop - 22
    	tell application "Microsoft Word"
    		tell window 1
    			set left position to xLeft
    			set top to yTop
    			set width to {xRight - xLeft}
    			set height to {yBottom - yTop} - 56
    		end tell
    	end tell
    else
    	tell application "System Events"
    		tell process frontProcessName to tell window 1
    			set position to {xLeft, yTop}
    			set size to {xRight - xLeft, yBottom - yTop}
    		end tell
    	end tell
    end if
    
    tell application frontProcessName to activate --back to where we were
    --
    --
    on max(i1, i2) -- I think I don't need this here any more…
    	if i1 > i2 then return i1
    	return i2
    end max
    --
    on min(i1, i2)
    	if i1 < i2 then return i1
    	return i2
    end min
    
     
    michast und yjnthaar gefällt das.
  2. michaelbach

    michaelbach Roter Seeapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.109
    Vielen Dank für die Blumen ;)

    Mist, ich dachte das ist universell. Unter OS9 war es leichter an die Bildschirmgröße dranzukommen. Weiß jemand Rat?

    pfiffig

    Das kann deshalb nicht gehen, weil dann das Programm sein eigenes Fenster -- das es ja gar nicht gibt -- groß machen will.
    Man muss es schon mit einem Hotkey-Programm starten. Butler ist doch erst mal umsonst, siehe hier früheres Fädchen.
     
  3. michaelbach

    michaelbach Roter Seeapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.109
    Es ist ja nicht das Fenster des Finders, sondern das Fenster des Maximier-Programms! Im Finder geht es schon, wenn man das über ein Hotkey-Programmm aufruft.

    Was für Seltsamkeiten bei Finder-Fenstern meinst Du? Mir fiele da nur die etwas seltsame Größe ein -- Rand oben & unten ist mal dabei (bounds), mal nicht.
     
  4. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Moin,

    probier's mal so:

    Code:
    set myResolution to (do shell script "system_profiler -detailLevel mini | grep Resolution | sed 's|.*Resolution:\\ ||'")
    
    Ist nicht gerade besonders schnell und ich habe noch nicht probiert, was der profiler bei zwei angeschlossenen Monitoren ausspuckt. Evtl. muss dann das Shellscript noch etwas aufwändiger werden.

    Grüße,

    Daisy

    Nachtrag: Das könnte sicher auch ins Auge gehen, wenn noch andere Geräte angeschlossen sind, die 'Resolution' unter ihren Eigenschaften haben (z.B. Scanner?, Drucker?) Das wäre mal noch zu testen ... kann ich aber z.Zt. nicht, da ich nur mit PowerBook ohne Peripherie unterwegs bin.
     
  5. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    Hallo allerseits.

    Auch ein sehr gutes Freeware-Programm um Hotkeys zu definieren ist Spark (ACHTUNG: direkter Download) sh. Screenshot

    Liebe Grüße
    Daniel
     
    #5 Dante101, 06.02.06
    Zuletzt bearbeitet: 08.02.06
  6. michaelbach

    michaelbach Roter Seeapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.109
    Das ist ja toll, kannte ich noch gar nicht. In der Tat muss man das noch genauer prüfen, aber mit "system_profiler SPDisplaysDataType" kann man schon mal die Datenmasse auch noch einschränken.

    Vielen Dank!
     
  7. atl

    atl Niederhelfenschwiler Beeriapfel

    Dabei seit:
    04.11.04
    Beiträge:
    842
    Falls es hilft, die Ausgabe bei 2 Monitoren ist folgende:
    Code:
    outsider:~ atl$ system_profiler SPDisplaysDataType | grep Resolution | sed 's|.*Resolution:\\ ||'
              Resolution: 1280 x 1024 @ 60 Hz
              Resolution: 1280 x 1024 @ 60 Hz
    
    ByE...
     
  8. LaForce

    LaForce Transparent von Croncels

    Dabei seit:
    18.01.06
    Beiträge:
    309
    Hi Michael,
    i hab das Script zwar nicht aussprobiert, aber so beim Durchlesen ist mir folgendes aufgefallen:
    Wenn ein Programm eine Tool-Palette hat, kann es sein, daß dieses Fenster das vorderste Fenster ist, obwohl ich gerade in einem Dokumentenfenster arbeite. In dem Falle würde natürlich das falsche Fenster vergrößert.

    Befindet sich das Fenster auf einem anderen als dem Hauptmonitor, wird das Fenster verschoben.
     
  9. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Vielen Dank - zwischenzeitlich habe ich's auch mit einem externen Monitor ausprobieren können - der bei mir auch eine andere Auflösung hat als der erste. Erwartungsgemäß ist der erste ausgespuckte Wert für den internen und der zweite für den externen Monitor. Interessant, dass das 'sed ..' bei dir das 'Resolution: ' nicht weggeschnitten hat. Falls das nicht überall geht, müsste man das halt anders machen - vielleicht so:

    Code:
    set myResolution to (do shell script "system_profiler SPDisplaysDataType | grep Resolution | awk '{print $2, $4}'")
    
    Dann ist der Output (bei mir) so:

    "1152 768
    1024 768"

    Grüße,

    Daisy
     
  10. atl

    atl Niederhelfenschwiler Beeriapfel

    Dabei seit:
    04.11.04
    Beiträge:
    842
    So funktioniert's:
    system_profiler SPDisplaysDataType | grep Resolution | sed 's/.*Resolution:\ //'
    Es lag nicht a dem Code, sondern daran, dass beim Einfügen in den Webbrowser der Backslash nach 'Resolution:' gedoppelt wird. :)

    ByE...
     
  11. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Hallo zusammen

    Ich habe gerade den Thread gelesen er ist für mich gerade interesant, weil ich ein fenster gerne automatisch auf einen anderen Monitor verschieben möchte. allerdings möchte ich die monitore über ihren namen identifizieren. Der Name des Monitors ist allerdings nicht über grep ... zu lesen, da er nicht wie z.B: die auflösung über resolution definiert wird. Aber ich bin überzeugt, auch dass läst sich lösen! :)

    gruss Patric
     
  12. Mich hat das Script animiert, es ein bisschen zu erweitern. Ich habe mehrere Scripte geschrieben, die verschiedene Fensteraktionen vollführen:
    • Fenster maximieren
    • Fenster auf dem Bildschirm zentrieren
    • Fenster vergrößern bzw. verkleinern auf den nächsten Wert von 640x480, 800x600 etc.
    • Fenster in eine der vier Ecken des Bildschirms schieben
    • Fenster bis zum Bildschirmrand nach rechts, links oben oder unten vergrößern.
    Ist das Dock sichtbar, so wird der Platz des Docks berücksichtigt. Die Skripte funktionieren auch für Wordfenster. Alle Skripte sind inhaltlich identisch, lediglich die Position und Größe des neuen Fensters ist jeweils unterschiedlich. Die Skripte laufen unter Butler wunderbar. Sie haben von mir den Namen "spooky" bekommen und die jeweils aktuelle Version ist herunter zu laden unter www.doernte.net unter software. Selbstverständlich ist die Benutzung vollkommen frei...

    Johannes Dörnte
     
    #12 JohannesDörnte, 19.05.06
    Zuletzt von einem Moderator bearbeitet: 20.05.06
  13. atl

    atl Niederhelfenschwiler Beeriapfel

    Dabei seit:
    04.11.04
    Beiträge:
    842
    Wo wir gerade dabei sind. Schon seit längerem habe ich mich - unter zu Hilfenahme hier aufgeführter Beispiele - daran versucht, eine einfache Möglichkeit zu schaffen, mehrere Fenster einer Applikation nebeneinander anzuordnen. Mittlerweile habe ich ein halbwegs funktionsfähiges Skript zusammengezimmert.
    Code:
    global screenSize, frontProcessName
    property dockWidthOnLeft : 0
    property dockWidthOnRight : 0
    property dockHeightOnBottom : 0
    property windowPadding : 5
    
    tell application "System Events"
        set frontProcessName to name of first application process whose frontmost is true
        --set frontProcessName to "Microsoft Word"
        tell list 1 of process "Dock"
            set dockOrientation to orientation
            set dockPositionRecord to position
            set dockSizeRecord to size
        end tell
        if dockOrientation as string = "AXHorizontalOrientation" then
            set dockHeightOnBottom to (item 2 of dockSizeRecord)
            set dockWidthOnLeft to 0
            set dockWidthOnRight to 0
        else
            if dockOrientation as string = "AXVerticalOrientation" then
                if (item 1 of dockPositionRecord) < 2 then -- dock is at left side of screen
                    set dockWidthOnLeft to (item 1 of dockSizeRecord) + windowPadding
                    set dockWidthOnRight to 0
                    set dockHeightOnBottom to 0
                else -- dock is at right side of screen
                    set dockWidthOnRight to (item 1 of dockSizeRecord)
                    set dockWidthOnLeft to 0
                    set dockHeightOnBottom to 0
                end if
            end if
        end if
    end tell
    
    tell application "Finder" to copy the bounds of window of desktop to screenSize
    set numItems to count of documents of application frontProcessName
    --display dialog numItems
    if (numItems > 0) then
        set windowWidth to (((item 3 of (screenSize)) - dockWidthOnLeft - dockWidthOnRight) / numItems)
    end if
    
    if (frontProcessName = "Microsoft Word") then
        repeat with n from 1 to (numItems)
            tell application "Microsoft Word"
                tell window n
                    set left position to {(((n - 1) * windowWidth) + windowPadding)}
                    set top to {(windowPadding)}
                    set width to {windowWidth - 2 * windowPadding}
                    set height to {(item 4 of screenSize) - 22 - 2 * windowPadding - dockHeightOnBottom - 67}
                end tell
            end tell
        end repeat
    else
        repeat with n from 1 to (numItems)
            tell application "System Events" to tell process frontProcessName
                -- tell application frontProcessName
                tell (item n of windows)
                    --set bounds to {((n - 1) * windowWidth) + dockWidthOnLeft, 22 + windowPadding, n * windowWidth + dockWidthOnLeft - dockWidthOnRight - windowPadding, (item 4 of screenSize) - windowPadding - dockHeightOnBottom}
                    set position to {(((n - 1) * windowWidth) + dockWidthOnLeft + windowPadding), (22 + windowPadding)}
                    set size to {windowWidth - 2 * windowPadding, (item 4 of screenSize) - 22 - 2 * windowPadding - dockHeightOnBottom}
                end tell
            end tell
        end repeat
    end if
    tell application frontProcessName to activate
    Mittels Butler auf die Tastenkombination <ctrl> + <apfel> + <M> gelegt funktioniert es bei mir mit folgenden Applikationen:
    • Skripteditor
    • SubEthaEdit
    • Microsoft Word
    • Safari
    • Textedit
    • OmniOutliner
    Bei Camino, Microsoft Excel, Microsoft PowerPoint funktioniert es leider nicht, obwohl da die Funktionalität auch sinnvoll wäre. Mal sehen, vielleicht setze ich mich da noch dran. Falls jemand dafür schon Sachen hat, immer her damit. :)

    Aber auch Verbesserungen, die das Skript für weitere Programme nutzbar machen, sind herzlich willkommen. :)

    ByE...
     
  14. xxxsemoi

    xxxsemoi Golden Delicious

    Dabei seit:
    18.12.06
    Beiträge:
    11
    Hallo,


    nach dieser Option habe ich bereits lange gesucht. Butler scheint mir ein fantastisches Programm zu sein. Ich habe lange unter Linux mit Enlightenment gearbeitet und habe mir alles so einrichten können, wie ich es wollte.

    Leider bin ich zu blöd, um das Skript richtig zu benutzen. Ich habe es jetzt bereits auf zwei Arten versucht, aber bin kläglich gescheitert:
    1) Skript als Datei in $HOME/bin speichern und anschließend die Datei von Butler via Tastenkombination aufrufen.
    2) Quelltext direkt in Butler eingegeben.

    Gibt es eine Internetseite, auf der Schritt für Schritt das Vorgehen beschrieben wird?

    Gruß
    xxx
     
  15. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Hallo,

    für Applescript ist:

    Programme/Applescript/SkriptEditor

    gedacht.


    mfg pi26
     

Diese Seite empfehlen