Finding the Current Active Window in Mac OS X using Python

This should work:

#!/usr/bin/python

from AppKit import NSWorkspace
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName

Only works on Leopard, or on Tiger if you have PyObjC installed and happen to point at the right python binary in line one (not the case if you’ve installed universal MacPython, which you’d probably want to do on Tiger). But Peter’s answer with the Carbon way of doing this will probably be quite a bit faster, since importing anything from AppKit in Python takes a while, or more accurately, importing something from AppKit for the first time in a Python process takes a while.

If you need this inside a PyObjC app, what I describe will work great and fast, since you only experience the lag of importing AppKit once. If you need this to work as a command-line tool, you’ll notice the performance hit. If that’s relevant to you, you’re probably better off building a 10 line Foundation command line tool in Xcode using Peter’s code as a starting point.

Leave a Comment