Saya ingin tahu apakah mungkin mengidentifikasi proses mana yang bertanggung jawab untuk membuat / mengelola jendela di Mac OS X.
Misalnya, ketika beberapa contoh aplikasi dimulai, bagaimana saya bisa mendapatkan ID proses (PID) yang sesuai dengan satu jendela tertentu? Atau jika ada jendela dialog modal tanpa judul, bagaimana saya bisa mendapatkan PID pemiliknya?
Saya tahu di Windows dimungkinkan menggunakan alat Sysinternals Suite yang menyediakan cara untuk mencari perpustakaan yang berjalan dengan beberapa data.
Saya mencari mekanisme yang mirip dengan yang muncul di blogpost ini .
Dalam hal ini, menggunakan Sysinternals Suite (dan Process Explorer), mereka menemukan DLL / program mana yang menggunakan webcam dengan mencari DLL atau substring (dalam hal ini, menggunakan nama fisik perangkat).
Jadi apakah ada mekanisme atau program, atau apakah Anda punya ide tentang cara mencari sesuatu yang mirip untuk Mac OS X? Bagaimana saya bisa mengidentifikasi proses mana yang telah meluncurkan jendela?
Jawaban:
Saya telah menggunakan skrip Python . Ini tidak mudah, tetapi itu bekerja cukup baik untuk saya.
Saya tidak akan memposting ulang skrip lengkap tanpa izin, tetapi inilah ringkasannya: Ini menggunakan
CGWindowListCopyWindowInfo
, yang diimpor dariQuartz
, untuk mengumpulkan informasi jendela dari sistem, kemudian meminta pengguna untuk memindahkan jendela yang diinginkan, kemudian mengumpulkan informasi jendela lagi, dan menunjukkan info untuk yang berubah. Info yang dibuang termasuk ID proses, sebagaikCGWindowOwnerPID
.Ini kodenya:
Script mencetak informasi untuk jendela yang mengubah posisi dalam interval 5 detik. Jadi outputnya terlihat seperti ini:
sumber
Saya membuat alat bernama
lswin
Kemudian Anda dapat menggunakan grep untuk menemukan pid jendela Anda.
Berikut adalah kode sumber skrip:
sumber
@kenorb Saya menggabungkan 2 versi skrip Anda, pada dasarnya ini berfungsi seperti yang pertama, menunjukkan perbedaan tetapi memformat dari yang kedua. Juga jika jendela tidak ada di layar - tidak dicetak, jika tidak akan menghasilkan terlalu banyak sampah
sumber
pip install pyobjc-framework-Quartz