Я хотел бы знать, возможно ли определить, какой процесс отвечает за создание / управление окном в Mac OS X.
Например, когда запускается несколько экземпляров приложения, как я могу получить идентификатор процесса (PID), соответствующий одному конкретному окну? Или, если есть модальное диалоговое окно без заголовка, как я могу получить PID его владельца?
Я знаю, что в Windows это возможно с помощью инструмента Sysinternals Suite , который предоставляет способ поиска библиотеки, работающей с некоторыми данными.
Я ищу механизм, похожий на тот, который появляется в этом посте .
В этом случае, используя Sysinternals Suite (и Process Explorer), они обнаружили, какая DLL / программа использовала веб-камеру, выполнив поиск DLL или подстроки (в данном случае, используя физическое имя устройства).
Так есть ли какой-нибудь механизм или программа, или у вас есть идеи о том, как искать что-то подобное для Mac OS X? Как я могу определить, какой процесс запустил окно?
Ответы:
Я использовал скрипт Python . Это не надежно, но для меня это очень хорошо работает.
Я не буду репостировать полный сценарий без разрешения, но вот резюме: он использует
CGWindowListCopyWindowInfo
, который импортируется изQuartz
, для сбора информации о окнах из системы, затем просит пользователя переместить желаемое окно, затем снова собирает информацию о окне и показывает информация для тех, кто изменился. Дамп информации включает в себя идентификатор процесса, какkCGWindowOwnerPID
.Вот код:
Сценарий печатает информацию для окна, которое изменило положение в течение 5 секунд. Итак, вывод выглядит так:
источник
Я сделал инструмент с именем
lswin
Затем вы можете использовать grep, чтобы найти pid вашего окна.
Вот исходный код скрипта:
источник
@kenorb Я объединил ваши 2 версии скрипта, в основном он работает как первая, показывая разницу, но форматирование идет от второй. Также, если окно не на экране - оно не печатается, иначе оно выдает слишком много мусора
источник
pip install pyobjc-framework-Quartz