2 votes

Déplacer la fenêtre du Finder d'un écran à un autre

Serait-il possible de créer un AppleScript pour faire glisser instantanément une fenêtre d'un écran à un autre (disons, au centre du deuxième écran) ?

4voto

Dave Points 9855

Essayez ceci :

--  Script de déplacement de fenêtres entre plusieurs moniteurs pour Apple Mac OS X 10.x
-- (quelque chose que je fais avec UltraMon depuis un certain temps)
--  inspiré par :
--     http://www.tidbits.com/webx?14@@.3c7b1ae3/5
--     http://macscripter.net/viewtopic.php?id=24511
-- et http://daringfireball.net/2006/12/display_size_applescript_the_lazy_way
-- merci pour l'entrée ... Je cherchais une solution depuis un certain temps
-- mieux utilisé avec un déclencheur personnalisé dans Quicksilver où ce script est assigné à un
-- raccourci clavier (j'utilise ALT Flèche Droite)
-- vous voudrez peut-être mettre Quicksilver dans vos Objets de démarrage automatique
-- 2009-09-14 Wolfgang Fahl

--
-- obtenir la fenêtre en premier plan
-- 
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
--
-- obtenir la fenêtre en premier plan
-- 
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
--
-- lister toutes les fenêtres
--
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

--
-- dialogue de message
--
on show(aMessage)
    -- affiche une boîte de dialogue avec un message
    display dialog aMessage buttons {"Ok"} default button "Ok"
end show

--
-- obtenir les informations de l'écran
--
on getScreenInfo(theIndex)
    -- obtenir les informations de l'écran à partir des paramètres par défaut du gestionnaire de fenêtres
    -- nous utilisons awk pour parcourir les sections DisplaySets et supposons que Active = ... est
    -- au début de chaque section
    -- nous trouverons les entrées OriginX = ..., OriginY = ..., Width = ... et Height = ...
    -- et les retournerons sous forme de liste comme
    -- 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

--
-- déplacer la fenêtre en premier plan vers un autre moniteur
--
tell application "System Events"
    -- obtenir les informations OffsetX, OffsetY, Width et Height pour les écrans
    -- nous supposons ici que deux écrans sont présents (sans vérifier cela ...)
    -- informations du premier écran
    set theScreen1 to getScreenInfo(1) of me

    -- informations du deuxième écran
    set theScreen2 to getScreenInfo(2) of me

    -- pour la fonctionnalité de ce script, nous nous contentons des informations de résolution pour le moment
    set startX to item 1 of theScreen1
    set startY to item 2 of theScreen1
    set resolutionX to item 3 of theScreen1
    set resolutionY to item 4 of theScreen1

    set startX2 to item 1 of theScreen2
    set startY2 to item 2 of theScreen2
    set resolutionX2 to item 3 of theScreen2
    set resolutionY2 to item 4 of theScreen2

    -- faire du bruit pour que tout le monde sache que nous avons reçu la commande
    beep

    -- 1er, déterminer les positions X et Y actuelles de la fenêtre en premier plan
    set theWindow to getFrontWindow() of me
    set thePosition to position of theWindow

    -- décommentez ceci si vous voulez déboguer
    -- display alert name of theWindow & ": " & ((first item of thePosition) as string) & ", " & ((second item of thePosition) as string) & " screen1:" & (startX as string) & "," & (startY as string) & "-" & (resolutionX as string) & "," & (resolutionY as string) & " screen2:" & (startX2 as string) & "," & (startY2 as string) & "-" & (resolutionX2 as string) & "," & (resolutionY2 as string)
    set currXPos to (first item of thePosition)
    set currYPos to (second item of thePosition)

    -- sommes-nous sur le premier moniteur ?
    if currXPos < resolutionX / 2 then
        -- déplacement vers la droite
        set newX to currXPos + resolutionX
        set newY to currYPos - startY2
    else
        -- déplacement vers la gauche
        set newX to currXPos - resolutionX
        if newX < startX then
            set newX to startX
        end if
        set newY to currYPos + startY2
    end if
    -- Maintenant nous déplaçons la fenêtre de moveX pixels vers la droite (ou la gauche si négatif)
    set position of theWindow to {(newX), (newY)}
end tell

Je l'ai testé et cela fonctionne pour moi sur Mavericks et un double écran. Utilisez Butler, Keyboard Maestro, etc. pour créer une touche de raccourci et ça marche très bien.

(Message original trouvé ici.)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X