在 PyObjC 中监听 onclick 事件
Listen onclick event in PyObjC
我尝试在系统上每次点击显示当前windows。
我做这个代码:
from AppKit import NSWorkspace
def getwindows():
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName
return
def main():
getwindows()
main()
但只有当前 windows 当我设置脚本时显示。
我如何将此脚本绑定到带有点击事件的循环中?
我已经尝试使用 Turtle
但出现了一些错误。
请注意,NSWorkSpace
的 activeApplication
方法已弃用。以下内容可用于主动探测 运行 应用程序的活动状态:
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 )
Active表示接收键盘输入。单击一个应用程序将使其变为活动状态。请注意,必须调用 acceptInputForMode
方法,以便 属性 更改反映在当前应用程序中。 运行 此程序然后单击各种其他应用程序 -- 您应该会看到活动应用程序发生变化。
一种绑定可以通过观察者完成:
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
还有一些其他属性,您可以 probe/observe(例如 hidden
),但列表很短。
我尝试在系统上每次点击显示当前windows。
我做这个代码:
from AppKit import NSWorkspace
def getwindows():
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName
return
def main():
getwindows()
main()
但只有当前 windows 当我设置脚本时显示。
我如何将此脚本绑定到带有点击事件的循环中?
我已经尝试使用 Turtle
但出现了一些错误。
请注意,NSWorkSpace
的 activeApplication
方法已弃用。以下内容可用于主动探测 运行 应用程序的活动状态:
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 )
Active表示接收键盘输入。单击一个应用程序将使其变为活动状态。请注意,必须调用 acceptInputForMode
方法,以便 属性 更改反映在当前应用程序中。 运行 此程序然后单击各种其他应用程序 -- 您应该会看到活动应用程序发生变化。
一种绑定可以通过观察者完成:
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
还有一些其他属性,您可以 probe/observe(例如 hidden
),但列表很短。