Gostaria de saber se é possível identificar qual processo é responsável pela criação / gerenciamento de uma janela no Mac OS X.
Por exemplo, quando várias instâncias de um aplicativo são iniciadas, como posso obter o ID do processo (PID) correspondente a uma janela específica? Ou, se houver uma janela de diálogo modal sem título, como posso obter o PID do proprietário?
Eu sei que no Windows é possível usar a ferramenta Sysinternals Suite , que fornece uma maneira de procurar uma biblioteca que está sendo executada com alguns dados.
Estou procurando por um mecanismo semelhante ao que aparece neste post do blog .
Nesse caso, usando o Sysinternals Suite (e o Process Explorer), eles descobriram qual DLL / programa estava usando a webcam pesquisando uma DLL ou substring (nesse caso, usando o nome físico do dispositivo).
Existe algum mecanismo ou programa ou você tem alguma idéia de como procurar algo semelhante para o Mac OS X? Como posso identificar qual processo lançou uma janela?
Respostas:
Eu usei o script Python . Não é infalível, mas funciona muito bem para mim.
Não vou repassar o script completo sem permissão, mas aqui está um resumo: ele usa
CGWindowListCopyWindowInfo
, que é importado deQuartz
, para coletar informações da janela do sistema, depois pede ao usuário para mover a janela desejada, depois coleta as informações da janela novamente e mostra informações para os que mudaram. As informações despejadas incluem o ID do processo, comokCGWindowOwnerPID
.Aqui está o código:
O script imprime informações para a janela que mudou de posição dentro de um intervalo de 5 segundos. Portanto, a saída é assim:
fonte
Eu fiz uma ferramenta chamada
lswin
Então você pode usar grep para encontrar o pid da sua janela.
Aqui está o código fonte do script:
fonte
@kenorb Combinei suas 2 versões do script, basicamente ele funciona como o primeiro, mostrando diferença, mas a formatação é a partir do segundo. Além disso, se a janela não estiver na tela - ela não está sendo impressa, caso contrário, gera muito lixo
fonte
pip install pyobjc-framework-Quartz