請注意,不建議使用activeApplication
方法NSWorkSpace
。下面可以用來積極探索運行的應用程序的積極狀態:
import AppKit
import time
rl = AppKit.NSRunLoop.currentRunLoop()
ws = AppKit.NSWorkspace.sharedWorkspace()
for i in xrange(10):
for app in ws.runningApplications():
if app.isActive():
print "active app:", app.localizedName()
date = AppKit.NSDate.date()
time.sleep(1)
rl.acceptInputForMode_beforeDate_(AppKit.NSDefaultRunLoopMode, date)
活動意味着它是接收鍵盤輸入。點擊一個應用程序將導致它變爲活動狀態。請注意,必須調用acceptInputForMode
方法,以便在當前應用程序中反映屬性更改。運行這個程序,然後點擊各種其他應用程序 - 您應該看到活動的應用程序更改。
A類結合可以通過觀察來完成:
import AppKit
ws = AppKit.NSWorkspace.sharedWorkspace()
appL = ws.runningApplications()
class MyClass(AppKit.NSObject):
def observeValueForKeyPath_ofObject_change_context_(self,
kpath, objid, change, context):
print "path change", kpath, change['new'], appL[context].localizedName()
obj = MyClass.new()
for i in xrange(len(appL)):
appL[i].addObserver_forKeyPath_options_context_(obj,
"isActive", AppKit.NSKeyValueObservingOptionNew, i)
date = AppKit.NSDate.date().dateByAddingTimeInterval_(10)
rl = AppKit.NSRunLoop.currentRunLoop()
rl.acceptInputForMode_beforeDate_(AppKit.NSDefaultRunLoopMode, date)
for app in appL:
app.removeObserver_forKeyPath_(obj, "isActive")
運行此程序同樣爲上。
您還可以探測/觀察NSRunningApplication
的其他一些屬性(例如hidden
),但列表非常短。