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