In einem Skript versuche ich, das Terminal.app-Fenster mit einem bestimmten tty-Gerät zu finden und dieses Fenster nach oben zu heben. Folgendes habe ich bisher in Applescript:
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
Wo ich stecken bleibe, ist der Teil "Fenster öffnen".
Hier sind einige Dinge, die nicht ganz das sind, was ich will:
set frontmost of theWin to true
- Dadurch wird das Fenster an die Vorderseite der Gruppe der Terminal.app-Fenster verschoben, aber nicht über andere Fenster angehoben.
tell application "Terminal" to activate
- Dies bringt jedes Terminalfenster in einem großen Stapel nach vorne. Ich will nur das eine Fenster.
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
Dies macht es fast, aber es bewirkt, dass das Terminalfenster auf die Position Nr. 2 angehoben wird, die sich noch unter dem aktiven Fenster befindet (wenn die aktive App etwas anderes als Terminal.app ist).
click theSysWin at {10,50}
- scheint nichts zu tun.
click first static text of theSysWin
- scheint nichts zu tun.
Gibt es eine Möglichkeit, dies zu tun? Es muss nicht in Applescript sein.
BEARBEITEN Ich habe diese Webseite ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) gefunden, auf der ein Obj-C / Cocoa-Aufruf zitiert wurde:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Ich bin weder mit ObjC noch mit Cocoa vertraut, und dies wird (letztendlich) von einem Shell-Skript aufgerufen, daher bin ich mir nicht sicher, wohin ich von dort aus gehen soll.
quelle
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Ich bin weder mit objc noch mit cocoa vertraut genug um zu wissen, wohin man von dort aus gehen soll.Sie können auf Menüelemente von Anwendungen klicken, die nicht aktiv sind. Verwenden Sie diese Option, um auf den Menüpunkt zu klicken, der dem Fenster im Menü Fenster entspricht .
Folgendes müssen Sie in Ihr Skript einfügen:
Während das Programm nicht aktiviert wird, befindet sich das Fenster ganz vorne.
quelle
Mir ist klar, dass dieser Thread ziemlich alt ist, aber ich bin darauf gestoßen, während ich das gleiche Problem bekämpft habe, und andere können es auch. Soweit ich das beurteilen kann, ist dies nicht in rohem AppleScript möglich. Dies kann jedoch in AppleScriptObjC erfolgen. Um das Beispiel von @Daniel Beck zu verwenden, würde die neue Version so aussehen.
Der hinzugefügte Code verwendet die Cocoa-Klasse NSWorkspace, um die Anwendung zu "starten", wodurch nur das vorderste Fenster dieser Anwendung mit Fokus nach vorne angehoben wird. Weitere Einzelheiten zu dem Prozess, der mich dazu gebracht hat, finden Sie auf meiner Website hier ausführlicher .
quelle
Hier ist ein weiterer Versuch, der unter macOS High Sierra getestet wurde. Leider funktioniert dies nur, wenn sich das angegebene Fenster auf dem aktuellen Desktop befindet! Die AppleScript-API zur Steuerung von Fenstern scheint unvollständig zu sein, was dies unmöglich macht.
Ersetzen Sie Ihren Anwendungsfall durch "Safari" und "WhatsApp".
Dies hebt die Fenster jedoch (sichtbar) in zwei Schritten an. Das Fenster wird zuerst an den oberen Rand der Fenster der Anwendung und erst dann an den oberen Rand aller Fenster angehoben. Nicht perfekt, aber funktional.
quelle