在PyObjC中侦听onclick事件

2024-09-28 18:48:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试为每次单击系统显示当前窗口。你知道吗

我执行以下代码:

from AppKit import NSWorkspace

def getwindows():
    activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
    print activeAppName
    return

def main():
    getwindows()

main()

但只有当前窗口时,我设置脚本显示。你知道吗

如何将此脚本绑定到带有click事件的循环中?你知道吗

我已经尝试过使用Turtle,但是附加了一些错误。你知道吗


Tags: 代码fromimport脚本main系统defprint
1条回答
网友
1楼 · 发布于 2024-09-28 18:48:42

已弃用的方法是cd2。以下内容可用于主动探测正在运行的应用程序的活动状态:

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的其他属性可以探测/观察(例如hidden),但是列表很短。你知道吗

相关问题 更多 >