Я начал с кода здесь , немного изменив его в соответствии со своими потребностями:
set appList to {} --list of all open applications
set winList to {} --list of all open windows
tell application "System Events"
repeat with theProcess in (processes whose visible is true)
tell theProcess
set processName to name
set theWindows to (name of windows) as text
end tell
set allWins to allWins + (count of theWindows)
set appList to appList&processName
set winList to winList&theWindows
end repeat
end tell
В качестве примера: допустим, у меня папка «Документы» открыта в Finder в своем собственном пространстве, мой текущий скрипт открыт в редакторе скриптов, а StackOverflow открыт в Safari в режиме разделенного просмотра, а почта свернута. Этот скрипт должен возвращать appList = {"Finder","Safari","Script Editor","Mail"}
в некоторой перестановке и winList = {"Documents","StackOverflow","MyScript","All Inboxes"}
в некоторой перестановке.
Вот моя проблема. На практике, когда я нажимаю «выполнить», очевидно, я открыт для разделения, так как там находится мой редактор сценариев. Так что я на самом деле получаю appList = {"Finder","Safari","Script Editor","Mail"}, winList = {,"Stack Overflow","MyScript","All Inboxes"}
- другими словами, пока скрипт обрабатывает этот Finder, он не обнаруживает открытых окон, потому что он находится в другом пространстве. С другой стороны, окно «Почта» свернуто, поэтому оно поднимается в Dock.
Сначала я предположил, что это происходит из-за надоедливой строки whose visible is true
- но окна Finder не видны, поскольку они находятся на другом экране.
Итак, я взял эту строку. В то время как appList
накапливалось со случайными закулисными приложениями, как и следовало ожидать, winList
остался прежним (за исключением нескольких лишних пробелов) - там все еще нет окон Finder.
Есть ли способ получить все мои окна всех моих приложений, даже если они находятся в другом месте?