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) ?
Réponse
Trop de publicités?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.)