Ich möchte wissen, ob es möglich ist, zu ermitteln, welcher Prozess für das Erstellen / Verwalten eines Fensters in Mac OS X verantwortlich ist.
Wie kann ich beispielsweise beim Starten mehrerer Instanzen einer Anwendung die Prozess-ID (PID) ermitteln, die einem bestimmten Fenster entspricht? Oder wenn es ein modales Dialogfenster ohne Titel gibt, wie kann ich die PID seines Besitzers erhalten?
Ich weiß, dass es unter Windows möglich ist, mit dem Sysinternals Suite- Tool nach einer Bibliothek zu suchen, die mit einigen Daten ausgeführt wird.
Ich suche nach einem ähnlichen Mechanismus wie in diesem Blogpost .
In diesem Fall haben sie mithilfe von Sysinternals Suite (und Process Explorer) herausgefunden, welche DLL / welches Programm die Webcam verwendet, indem sie nach einer DLL oder einem Teilstring gesucht haben (in diesem Fall anhand des physischen Namens des Geräts).
Gibt es einen Mechanismus oder ein Programm oder haben Sie eine Idee, wie Sie nach etwas Ähnlichem für Mac OS X suchen können? Wie kann ich erkennen, welcher Prozess ein Fenster gestartet hat?
Antworten:
Ich habe das Python-Skript verwendet . Es ist nicht narrensicher, aber es funktioniert ziemlich gut für mich.
Ich werde das vollständige Skript nicht ohne Erlaubnis erneut veröffentlichen, aber hier ist eine Zusammenfassung: Es verwendet
CGWindowListCopyWindowInfo
, was importiertQuartz
wird, um Fensterinformationen vom System zu sammeln, fordert den Benutzer dann auf, das gewünschte Fenster zu verschieben, sammelt dann Fensterinformationen erneut und zeigt Infos für diejenigen, die sich geändert haben. Die ausgelesenen Informationen enthalten die Prozess-ID askCGWindowOwnerPID
.Hier ist der Code:
Das Skript druckt Informationen für das Fenster, dessen Position sich innerhalb von 5 Sekunden geändert hat. Die Ausgabe sieht also so aus:
quelle
Ich habe ein Werkzeug namens gemacht
lswin
Dann können Sie grep verwenden, um die pid Ihres Fensters zu finden.
Hier ist der Quellcode des Skripts:
quelle
@kenorb Ich habe Ihre beiden Versionen des Skripts kombiniert. Im Grunde funktioniert es wie die erste, zeigt jedoch einen Unterschied, aber die Formatierung stammt von der zweiten. Auch wenn das Fenster nicht auf dem Bildschirm angezeigt wird, wird es nicht gedruckt, da sonst zu viel Müll entsteht
quelle
pip install pyobjc-framework-Quartz