В скрипте я пытаюсь найти окно Terminal.app, содержащее определенное устройство tty, и поднять это окно до самого верха. Вот что у меня есть в 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
То, где я застреваю, является частью "поднятия окна".
Вот некоторые вещи, которые не совсем то, что я хочу:
set frontmost of theWin to true
- это приводит окно к передней части группы окон Terminal.app, но не поднимает его над другими окнами.
tell application "Terminal" to activate
- это переносит каждое окно терминала вперед в большой стек. Я просто хочу одно окно.
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
Это почти делает это, но он поднимает окно терминала до позиции # 2, все еще под активным окном (если активное приложение - это что-то отличное от Terminal.app.)
click theSysWin at {10,50}
- кажется, ничего не делает.
click first static text of theSysWin
- кажется, ничего не делает.
Есть ли способ сделать это? Это не должно быть в Applescript.
РЕДАКТИРОВАТЬ Я нашел эту веб-страницу ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) со ссылкой на вызов Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Я не знаком ни с ObjC, ни с Cocoa, и это (в конечном счете) вызывается из сценария оболочки, поэтому не уверен, куда идти дальше.
источник
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
я недостаточно знаком с objc или cocoa чтобы знать, куда идти оттуда, хотя.Вы можете нажать пункты меню приложений, которые не активны. Используйте его для выбора пункта меню, соответствующего окну в меню « Окно» .
Вот что вам нужно вставить в ваш скрипт:
Пока он не активирует программу, окно находится на первом плане.
источник
Я понимаю, что эта ветка довольно старая, но я столкнулся с ней, борясь с той же проблемой, и другие тоже могут. Насколько я могу сказать, это не может быть сделано в сыром AppleScript. Однако это можно сделать в AppleScriptObjC. Чтобы использовать пример от @Daniel Beck, новая версия будет такой.
Добавленный код будет использовать класс Какао NSWorkspace для «запуска» приложения, которое поднимает только переднее окно этого приложения на передний план с фокусом. Для более подробной информации о процессе, который привел меня к этому, у меня есть более тщательное описание на моем сайте здесь .
источник
Вот еще одна попытка, протестированная на macOS High Sierra. Увы, это работает только тогда, когда данное окно находится на текущем рабочем столе! API-интерфейс AppleScript для управления окнами кажется неполным, что делает это невозможным.
Замените «Safari» и «WhatsApp» на ваш вариант использования.
Однако это (заметно) поднимает окна в два этапа. Сначала он поднимает окно к вершине окон приложения, а только затем поднимает его к вершине всех окон. Не идеально, но функционально.
источник