Dans un script, j'essaie de trouver la fenêtre Terminal.app contenant un périphérique tty spécifique et de relever cette fenêtre vers le haut. Voici ce que j'ai dans Applescript jusqu'à présent:
tell application "System Events"
set foundWin to false
if (name of processes) contains "Terminal" then
tell application "Terminal"
set theTabs to first tab of every window where tty is "$(tty)"
repeat with theTab in theTabs
if class of theTab is tab then
set theWin to (first window whose tabs contains theTab)
set selected tab of theWin to theTab
set foundWin to true
end if
end repeat
end tell
end if
if foundWin then
--RAISE THE WINDOW?!
end if
end tell
Là où je suis coincé, c'est la partie "lever la fenêtre".
Voici quelques choses qui ne sont pas tout à fait ce que je veux:
set frontmost of theWin to true
- cela amène la fenêtre à l'avant du groupe de fenêtres Terminal.app mais ne la place pas au-dessus des autres fenêtres.
tell application "Terminal" to activate
- cela amène chaque fenêtre du terminal à l'avant dans une grande pile. Je veux juste une seule fenêtre.
tell application "System Events"
set theSysWin to first window of process "Terminal" whose name is (name of theWin)
perform action "AXRaise" of theSysWin
end tell
Cela le fait presque, mais ce qu'il fait est de soulever la fenêtre du terminal à la position n ° 2, toujours sous la fenêtre active (si l'application active est autre chose que Terminal.app.)
click theSysWin at {10,50}
- ne semble rien faire.
click first static text of theSysWin
- ne semble rien faire.
Y a-t-il un moyen de faire cela? Il n'est pas nécessaire que ce soit en Applescript.
EDIT J'ai trouvé cette page Web ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) citant un appel Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Je ne suis pas familier avec ObjC ou Cocoa, et cela est (finalement) invoqué à partir d'un script shell, donc je ne sais pas où aller à partir de là.
la source
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
je ne connais pas assez bien objc ou cacao pour savoir où aller à partir de là cependant.Vous pouvez cliquer sur les éléments de menu des applications qui ne sont pas actives. Utilisez-le pour cliquer sur l'élément de menu correspondant à la fenêtre dans le menu Fenêtre .
Voici ce que vous devez insérer dans votre script:
Bien qu'il n'active pas le programme, la fenêtre est au premier plan.
la source
Je me rends compte que ce fil est assez ancien, mais je l'ai croisé tout en luttant contre le même problème et d'autres le peuvent aussi. Pour autant que je sache, cela ne peut pas être fait en AppleScript brut. Cependant, cela peut être fait dans AppleScriptObjC. Pour utiliser l'exemple de @Daniel Beck, la nouvelle version serait comme ça.
Le code ajouté utilisera la classe Cocoa NSWorkspace pour "lancer" l'application, qui ne soulève que la fenêtre la plus en avant de cette application vers l'avant avec le focus. Pour plus de détails sur le processus qui m'a amené à cela, j'ai un article plus approfondi sur mon site Web ici .
la source
Voici une autre tentative, testée sur macOS High Sierra. Hélas, cela ne fonctionne que lorsque la fenêtre donnée est sur le bureau actuel! L'API AppleScript pour contrôler les fenêtres semble être incomplète, ce qui rend cela impossible.
Remplacez «Safari» et «WhatsApp» pour votre cas d'utilisation.
Cependant, cela soulève (visiblement) les fenêtres en deux étapes. Il soulève d'abord la fenêtre en haut des fenêtres de l'application, puis ne la lève qu'en haut de toutes les fenêtres. Pas parfait, mais fonctionnel.
la source