Verfolgen Sie aktive Anwendungen auf einem Mac mit Python

Objective-C Es ist schwer zu merken, also habe ich es gerade gekratzt, aber ich habe es mit Python (und PyObjC) geschrieben:

active_app_logger.py


from AppKit import *
from PyObjCTools import AppHelper

def main():
    nc = NSWorkspace.sharedWorkspace().notificationCenter()
    nc.addObserver_selector_name_object_(
        Observer.new(),
        "handle:",
        NSWorkspaceDidActivateApplicationNotification,
        None
    )
    AppHelper.runConsoleEventLoop(installInterrupt=True)

class Observer(NSObject):
    def handle_(self, noti):
        """Prozess wird aufgerufen, wenn die aktive Anwendung gewechselt wird"""
        info = noti.userInfo().objectForKey_(NSWorkspaceApplicationKey)
        for n in ["bundleIdentifier", "localizedName", "bundleURL",
                  "executableURL", "launchDate"]:
            v = info.valueForKey_(n)
            print("%s (%s):\t%s" % (n, v.className(), v))
        print("--")

main()

Führen Sie es auf Ihrem Gerät aus und wechseln Sie die Anwendungen in der Reihenfolge Google Chrome → iTerm:

$ python cocoa_active_window.py
bundleIdentifier (__NSCFString):        com.google.Chrome
localizedName (__NSCFString):   Google Chrome
bundleURL (NSURL):      file:///Applications/Google%20Chrome.app
executableURL (NSURL):  file:///Applications/Google%20Chrome.app/Contents/MacOS/Google%20Chrome
launchDate (__NSDate):  2015-01-02 05:09:26 +0000
--
bundleIdentifier (__NSCFString):        com.googlecode.iterm2
localizedName (NSTaggedPointerString):  iTerm
bundleURL (NSURL):      file:///Applications/iTerm.app
executableURL (NSURL):  file:///Applications/iTerm.app/Contents/MacOS/iTerm
launchDate (__NSTaggedDate):    2015-01-02 05:59:29 +0000
--

PyObjC muss installiert sein, um dieses Skript auszuführen:

$ sudo pip install pyobjc

Die Betriebsumgebung des Skripts lautet:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.10.1
BuildVersion:   14B25
$ xcodebuild -version
Xcode 6.1.1
Build version 6A2008a
$ python --version
Python 2.7.6
$ pip show 'pyobjc' | grep Version
Version: 3.0.4

Ich habe mich für PyObjC entschieden, weil es anscheinend mehr Materialien als Ruby (RubyCocoa) enthält, was ich ein wenig gewohnt bin. Wenn jedoch weder Python noch PyObjC problemlos mit Objective-C verwendet werden können und ich noch nie eine Mac OS X-Anwendung erstellt habe, gehe ich gehorsam von Objective-C aus Es wäre vielleicht einfacher gewesen, sich zu erinnern. Es war schwer.

Es scheint, dass Sie "NSAccessibility" berühren müssen, um Informationen über das aktive Fenster zu erhalten. Geben Sie also auf. Ist "NSAccessibility" eine API mit einer soliden Richtlinie, die den Zugriff auf wichtige Informationen ermöglicht? Ich konnte es auch nicht in PyObjC finden, aber ist es nicht gebunden?

Recommended Posts

Verfolgen Sie aktive Anwendungen auf einem Mac mit Python
Python auf Mac
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
Installieren Sie Python auf dem Mac
Installieren von Python 3 in einer Mac-Umgebung
Installieren Sie Python 3.4 auf einem Mac
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
Fügen Sie Python 2.7.x in pyenv unter Mac OSX 10.15.5 ein
Installieren Sie pygame auf python3.4 auf dem Mac
Python3 + Django ~ Mac ~ mit Apache
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Umgang mit Python auf Mac
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Installieren Sie pandas 0.14 auf python3.4 [auf Mac]
Hinweise zur Installation von Python auf Ihrem Mac
Ich möchte Lambda mit Python auf Mac AWS!
Verwenden von OpenCV mit Python @Mac
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
Erstellen einer Python-Umgebung auf einem Mac
Wenn Python auf dem Mac verloren geht
Tensor Flow mit Anakonda auf Mac
Erste Schritte mit Python-Webanwendungen
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Konstruktionsnotiz für die Python-Umgebung auf dem Mac
Installieren Sie Python 3.7 Anaconda auf dem MAC, aber Python 2
Installieren Sie python3 auf einem Mac (El Capitan)
Erstellen einer Umgebung für Python3.8 auf einem Mac
Hinweise zur Verwendung von rstrip mit Python.
Wenn die Installation von Python 3.5.0 auf einem Mac fehlschlägt
Schritte zum Installieren von python3 auf einem Mac
Erste Schritte mit Python 3.8 unter Windows
Installieren Sie Python mit Mac vs Code
Rufen Sie C / C ++ von Python auf dem Mac auf
[Memo] Tweet auf Twitter mit Python
Aktualisieren Sie Mac Python von 2 auf 3
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac
Fehler und Lösung bei der Installation von Python3 mit Homebrew auf einem Mac (Catalina 10.15)
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
[Python] Erstellen einer Umgebung mit Anaconda [Mac]
Führen Sie das Servo mit Python unter ESP32 (Windows) aus.
Einführung in MAMP + Python + SQL Alchemy (MySQL-Python) auf dem Mac
Kartenmietinformationen auf einer Karte mit Python
[C] [Python] Lesen mit AquesTalk unter Linux
Hinweise zur japanischen OCR mit Python
Folgen Sie dem Python Style Guide mit Atom (flake8)
So löschen Sie Python 2.x auf einem Mac.
Hinweise zum Erstellen von Python und Pyenv auf dem Mac
Laden Sie mit Python Dateien im Web herunter
PIL mit Python 3.x unter macOS installieren
Arbeiten mit GPS in Python für Raspberry Pi 3
Setzen Sie die MeCab-Bindung für Python unter Windows, Mac und Linux mit pip ein
Senden und Empfangen von Binärdaten über serielle Kommunikation mit Python3 (auf Mac)
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Statistik mit Python
Strategie zur Monetarisierung mit Python Java
Erstellen Sie eine Python-Umgebung mit pyenv auf EC2 (Ubuntu)