Получить PID всех открытых окон в MacOS

Я попытался использовать следующие AppleScript, чтобы получить PID всех окон (включая свернутые). Этот сценарий не получает PID окон на других рабочих столах.

Есть ли обходной путь для этого, чтобы я мог получить список открытых окон на всех рабочих столах без необходимости activate отдельных процессов и проверки наличия у них окон?

tell application "System Events"
    repeat with proc in (every process)
        if exists(first window of proc) then
            set pid to unix id of proc
            log pid
        end if
    end repeat
end tell

PS, я не слишком хорошо разбираюсь в AppleScript. Мне удалось взломать это вместе с помощью StackOverflow. Это может быть не самый эффективный способ сделать то, что я пытаюсь сделать.


person Alok Mysore    schedule 03.02.2017    source источник


Ответы (1)


Похоже, я заставил это работать с этим уродливым bash-applescript хаком

osascript -e "tell application \"System Events\" 
    repeat with proc in (processes where background only is false)
        set pname to name of proc
        log pname
    end repeat
end tell" 2>&1 |
while read line
do
    echo "process " $line
    pgrep $line
done

Это печатает что-то вроде

process  Finder
818
process  Google Chrome
3730
3734
3740
5838
process  iTerm2
3750
4210
process  Sublime Text
3822

Где PID 818 принадлежит процессу Finder и так далее.

person Alok Mysore    schedule 03.02.2017