Help us understand the problem. What is going on with this article?

Mac でアクティブなアプリケーションを Python で追いかける

More than 5 years have passed since last update.

わざわざ Objective-C 覚えるの辛いので、まだちょっとかじった程度だけど Python (と PyObjC)使って書いてみた:
from AppKit import *
from PyObjCTools import AppHelper

def main():
    nc = NSWorkspace.sharedWorkspace().notificationCenter()

class Observer(NSObject):
    def handle_(self, noti):
        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))


端末で実行して、Google Chrome → iTerm の順にアプリケーションを切り替えてみる:

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

このスクリプトを実行する場合は、PyObjC のインストールが必要:

$ sudo pip install pyobjc


$ 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

多少使い慣れている Ruby(RubyCocoa) より資料も多そうだったので PyObjC を選んだけれど、Python も PyObjC も Objective-C もろくに使えず、Mac OS X アプリケーションも作ったことないなら素直に Objective-C から覚えたほうが楽だったかも。つらかった。

アクティブなウィンドウの情報を取るには NSAccessibility を触る必要があるっぽいので諦め。NSAccessibility はクリティカルな情報にアクセスできるポリシーが固めな API?また、PyObjC に見当たらなかったんだけどバインディングされてない?

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away