Objective-C C'est difficile à retenir, donc je viens de le gratter, mais je l'ai écrit en utilisant Python (et PyObjC):
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):
"""Processus appelé lors du basculement de l'application active"""
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()
Exécutez-le sur votre appareil et changez d'applications dans l'ordre de 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 doit être installé pour exécuter ce script:
$ sudo pip install pyobjc
L'environnement d'exploitation du script est:
$ 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
J'ai choisi PyObjC car il semblait avoir plus de matériaux que Ruby (RubyCocoa), auquel je suis un peu habitué, mais si ni Python ni PyObjC ne peuvent être facilement utilisés avec Objective-C, et je n'ai jamais créé d'application Mac OS X, je partirai docilement d'Objective-C. Cela aurait pu être plus facile à retenir. C'était difficile.
Il semble que vous deviez toucher NSAccessibility
pour obtenir des informations sur la fenêtre active, alors abandonnez. «NSAccessibility» est-il une API avec une politique solide qui permet d'accéder aux informations critiques? De plus, je ne l'ai pas trouvé dans PyObjC, mais n'est-il pas lié?
Recommended Posts