W skrypcie próbuję znaleźć okno Terminal.app zawierające określone urządzenie tty i podnieść je do góry. Oto, co do tej pory mam w 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
Utknąłem w części „podnoszenie okna”.
Oto kilka rzeczy, które nie są dokładnie tym, czego chcę:
set frontmost of theWin to true
- przenosi to okno na przód grupy okien Terminal.app, ale nie podnosi go ponad inne okna.
tell application "Terminal" to activate
- powoduje to, że każde okno terminala znajduje się na pierwszym planie w dużym stosie. Chcę tylko jedno okno.
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
To prawie robi, ale podnosi okno terminala do pozycji # 2, wciąż pod aktywnym oknem (jeśli aktywna aplikacja jest inna niż Terminal.app.)
click theSysWin at {10,50}
- wydaje się, że nic nie robi.
click first static text of theSysWin
- wydaje się, że nic nie robi.
Czy jest na to sposób? Nie musi być w Applescript.
EDYTUJ Znalazłem tę stronę internetową ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) cytując połączenie Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Nie znam ObjC ani Cocoa, a to (ostatecznie) jest wywoływane ze skryptu powłoki, więc nie jestem pewien, dokąd się udać.
źródło
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Nie znam się zbyt dobrze na objc ani kakao żeby wiedzieć, dokąd się udać.Możesz kliknąć elementy menu aplikacji, które nie są aktywne. Użyj go, aby kliknąć pozycję menu odpowiadającą oknu w menu Okno .
Oto, co musisz wstawić do skryptu:
Chociaż program nie aktywuje programu, okno jest na pierwszym planie.
źródło
Zdaję sobie sprawę, że ten wątek jest dość stary, ale natknąłem się na niego, walcząc z tym samym problemem i inni też mogą. O ile wiem, nie można tego zrobić w surowym AppleScript. Można to jednak zrobić w AppleScriptObjC. Aby użyć przykładu z @Daniel Beck, nowa wersja będzie taka.
Dodany kod będzie używał klasy NSWorkspace Cocoa do „uruchomienia” aplikacji, która skupia tylko pierwsze okno aplikacji na pierwszym planie. Aby uzyskać więcej informacji na temat procesu, który mnie do tego doprowadził, mam dokładniejszy opis na mojej stronie tutaj .
źródło
Oto kolejna próba, przetestowana na macOS High Sierra. Niestety działa to tylko wtedy, gdy dane okno znajduje się na bieżącym pulpicie! Interfejs API AppleScript do sterowania oknami wydaje się niekompletny, co uniemożliwia.
W przypadku użycia zastąp „Safari” i „WhatsApp”.
To jednak (widocznie) podnosi okna w dwóch krokach. Najpierw podnosi okno do górnej części okien aplikacji, a dopiero potem podnosi je do góry wszystkich okien. Nie idealny, ale funkcjonalny.
źródło