macfidelity

|

rethinking the think-different thing

mac | Programm auf zweitem Monitor betreiben

March 31st, 2009 at 12:09

Will man ein bestimmtes Programm immer an einer bestimmten Bildschirmposition haben, kann man sich auf das Betriebssystem verlassen oder einfach manuell das ganze forcieren.

Im Beispiel habe ich ein MacBook mit externem Monitor (1920 x 1200) der als primärer Desktop definiert ist, d.h. das eingebaute Display (1280 x 800) des MacBooks ist das sekundäre.

Bilder helfen ja oft ;)

20090331_applescript_mover_01

Lasse sucht jetzt nach ner Variante ein bestimmtes Programm an einer bestimmten Stelle zu starten / hinzubewegen um sein Media-Center zu optimieren.

Folgendes Script könnte mit etwas Glück ein Einstieg sein, vielleicht noch leicht anpassen, aber so grob sollte es funktionieren oder aber zumindest ein paar Ideen geben.

20090331_applescript_mover_02

Zu Beginn wird das eigene Programm definiert, anschließend wird dieses aktiviert, um dann die Position auszulesen. Basierend an diesen X/Y Daten kann je nach Monitorsetup relativ leicht erkannt werden wo sich das Fenster befindet. Die umpositionierung habe ich mal recht trivial umgesetzt, geht aber. Im letzten Schritt wird der Anzeigemodus gewechselt … ob das in jedem Programm wirklich einem Fullscreen entspricht wage ich zu bezweifeln ;)

@Lasse:

Finde leider den eigentlich angedachten Snippet grad nicht, daher eher was spontan gebasteltes – vielleicht hilfts ja

Tags: , , , ,

10 Responses to “mac | Programm auf zweitem Monitor betreiben”

  1. der_flo Says:

    gutes Thema :-)

    gibts irgendwie ne Möglichkeit, Filme/Videos die man bei iTunes bildschirmfüllend startet, nur auf einem Monitor anzeigen zu lassen. Ich mag des nicht, wenn der zweite Bildschirm dann komplett schwarz wird…

    flo

  2. fidel Says:

    puh bei itunes bin ich per se mal überfragt, sorry.

  3. Lasse Says:

    Hehe danke für die Mühen ;) Werde es nachher mal zu Hause ausprobieren. Allerdings befürchte ich, dass die Anwendung nicht scriptbar ist. Zumindest mein Versuch gestern mit einem einfachen resizen des Fensters und die Anzeige an einem bestimmten Punkt war damit nicht möglich – lief allerdings mit Safari ohne Probleme. Ich bin mal gespannt und werde berichten :D

  4. fidel Says:

    war ja kein aufwand ;)

    mh, es gibts ja noch die Möglichkeit mit GUI scripting. Aber teste du erstmal

  5. KommentKaeptn Says:

    Hallo Herr Fidel,

    ich weiss ja nicht ob (Cr)apple einen EWMH/NetWM compatible X Window Manager bereitstellt, aber falls doch hilft bei solchen Problemen:
    http://freshmeat.net/projects/wmctrl

    Viele Grüße an den Rest der Familie ;)
    K.

  6. fidel Says:

    @5
    also mit dir red ich erst wenn du ein richtiges Kaeptnb-Icon hast ;)

    bzgl ueber-vorschlag:
    macports – wer auch immer den ansatz testen will =)

    Ebenso
    F.

  7. KommentKaeptn Says:

    withpicturethistime

  8. fidel Says:

    hrhr … ich glaub ich erklär dir das heut abend mal Capitano ;)

  9. Wolfgang Fahl Says:

    Danke für das obige Script. Hier ist ein Vorschlag der noch ein bischen mehr Infos sammelt. Wäre schön, wenn mehr draus würde …

    – Window Moving Script between multiple monitors for Apple Mac OS X 10.x
    – (something I’ve been doing with UltraMon for quite a while)
    – inspired by:
    http://www.tidbits.com/webx?14@@.3c7b1ae3/5
    http://macscripter.net/viewtopic.php?id=24511
    – and http://daringfireball.net/2006/12/display_size_applescript_the_lazy_way
    – thanx for the input … I was looking for a solution of this quite a while
    – best to be used with a custom trigger in Quicksilver where this script is assigned to a
    – keyboard short cut (I use ALT Cursor-Right)
    – you might want to put Quicksilver into your Autostart Objects
    – 2009-09-14 Wolfgang Fahl


    – get the front Window

    on getFrontWindow1()
    tell application “System Events”
    set theFrontWindow to first window of (first process whose frontmost is true)
    – set theFrontWindow to the front window
    set windowname to name of theFrontWindow as string
    say “Moving” & windowname
    –display dialog “front most windows is ” & name of theFrontWindow buttons (“Cool”) giving up after 3 default button 1
    return theFrontWindow
    end tell
    end getFrontWindow1

    – get the front Window

    on getFrontWindow()
    tell application “System Events”
    repeat with theapp in (every application process whose visible is true and frontmost is true)
    repeat with ew in (every window of theapp)
    return ew
    end repeat
    end repeat
    end tell
    end getFrontWindow

    – list all windows

    on listWindows()
    tell application “System Events”
    repeat with theapp in (every application process whose visible is true and frontmost is true)
    repeat with ew in (every window of theapp)
    set windowname to name of ew as string
    say windowname
    end repeat
    end repeat
    end tell
    end listWindows


    – message dialog

    on show(aMessage)
    – display a dialog with a message
    display dialog aMessage buttons {“Ok”} default button “Ok”
    end show


    – get the screen information

    on getScreenInfo(theIndex)
    – get the Screen Information from the windowserver defaults
    – we are using awk to go to the DisplaySets sections and assume that Active = … is
    – at the start of each section
    – we’ll find OriginX= …,OriginY= …, Width = … and Height= … entries
    – and return all of them a a list like
    – 0 0 1920 1200
    – 0 1920 1650 1050
    set screenInfo to do shell script “defaults read /Library/Preferences/com.apple.windowserver | awk ‘
    BEGIN { FS=\”=\” }
    /Active/ { screens++ }
    { gsub(\”;\”,\”\”,$2) }
    /^ *OriginX/ { ox[screens] = $2 }
    /^ *OriginY/ { oy[screens] = $2 }
    /^ *Width/ { w[screens] = $2 }
    /^ *Height/ { h[screens] = $2 }
    END {
    for (si=1;si<=screens;si++) {
    print ox[si],oy[si],w[si],h[si]
    }
    }'"
    set theInfo to paragraph theIndex of screenInfo
    return {word 1 of theInfo, word 2 of theInfo, word 3 of theInfo, word 4 of theInfo}
    end getScreenInfo


    – move the front window to another monitor

    tell application "System Events"
    – get the OffsetX,OffsetY,Width and Height information for the screens
    – here we assume that two screens are present (without checking this …)
    – first screen info
    set theScreen1 to getScreenInfo(1) of me

    – second screen info
    set theScreen2 to getScreenInfo(2) of me

    – for the functionality of this script we are happy with the resolution info for the time being
    set resolutionX to item 3 of theScreen1
    set resolutionY to item 4 of theScreen1

    – make some nois to let everybody know we have receive the command
    beep

    – 1st, determine current X & Y Positions of the current front window
    set theWindow to getFrontWindow() of me
    set thePosition to position of theWindow

    – uncomment this if you'd like to debug
    – display alert name of theWindow & ": " & ((first item of thePosition) as string) & ", " & ((second item of thePosition) as string)
    set currXPos to (first item of thePosition)
    set currYPos to (second item of thePosition)
    – are we on the first monitor?
    if currXPos < resolutionX then
    – move right
    set moveX to resolutionX
    else
    – move left
    set moveX to -resolutionX
    end if
    – Now we move the window moveX pixels to the right (or left if negative)
    set position of theWindow to {(currXPos + moveX), (currYPos)}
    end tell

  10. fidel Says:

    @Wolfgang:

    Hi … und erstmal danke für den Ansatz. Werde mir das die Tage mal in aller Ruhe ansehen.

    Kannst du mir das ganze mal per Mail (fidel AT macfidelity DOT de) zukommen lassen – WordPress verschluckt leider immer wieder Zeichen bei Code. An dem Kommentarzeichen siehst du das sehr gut.

    Dann würde ich das ganze als File anhängen.

    Danke & Gruss
    fidel

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>