每当我运行这个Python CGEventTap代码时,我都会收到一个总线错误:
def callback(ent):
loc = CGEventGetLocation(ent)
print loc
tap = CGEventTapCreate(
kCGSessionEventTap,
kCGHeadInsertEventTap,
kCGEventTapOptionDefault,
CGEventMaskBit(kCGEventMouseMoved),
callback(CGEventRef) )
loop = CFMachPortCreateRunLoopSource(None, tap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), loop, kCFRunLoopCommonModes)
RunApplicationEventLoop()
有什么明显的东西我不见了吗?
答案 0 :(得分:1)
我已经尝试了以下所有方法:......我需要哪些而不需要? 链接是什么意思? - 柚木
使用答案回复您的评论,因为它不适合评论。遗憾。
情况可能有点令人费解。 PyObjC有关于Apple框架中的函数,对象等的一大堆信息(元数据和一些帮助代码),但它不包含代码本身(因为它是Apple的代码和PyObjC)不能只是复制它)。您正在使用的功能在Apple的ApplicationServices框架中。 PyObjC在其Quartz
模块中保留有关该框架的信息。所以第一部分是:要在Python中使用这些函数,你需要得到PyObjC的信息:from Quartz import *
。
第二部分是,就像我说的那样,你的应用程序需要知道,不仅仅是PyObjC的元数据在哪里,而是你尝试使用的Apple代码。这是链接部分。 (看起来你不是在使用Xcode,因为你正在设置自己的运行循环,但是在Xcode中,你会转到项目中的Linked Frameworks组并向其添加ApplicationServices。)
我猜你在使用py2app?我担心我不是百分百肯定如何这样做,但这个问题可能会让你开始:Problem using py2app
希望能为您指明方向。
(顺便说一下,当我用你的代码设置一个项目时,在Xcode和链接的ApplicationServices框架中,它锁定了我的输入设备,这样我唯一能做的就是重启。我可能已经做了一些事情错误,但要注意,当你得到这个链接时,可能是你设置的点击的其他问题。你可能想先尝试在C / Obj-C中这样做然后当你知道它可行时,转换成Python。)