每当我运行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()我是不是明显漏掉了什么?
发布于 2011-03-21 08:32:51
我已经尝试了以下所有方法:...哪些是我需要的,哪些是不需要的?你说链接是什么意思?- Teak
回复你的评论,因为它不适合你的评论。抱歉的。
情况可能有点错综复杂。PyObjC有一大堆关于苹果框架中的函数、对象等的信息(元数据和一些辅助代码),但它本身并不包含代码(因为这是苹果的代码,PyObjC不能随意复制它)。您正在使用的函数位于苹果的ApplicationServices框架中。PyObjC在其Quartz模块中保留了有关该框架的信息。因此,第一部分:要在Python中使用这些函数,您需要获取PyObjC的信息:from Quartz import *。
第二部分,正如我所说的,您的应用程序不仅需要知道PyObjC的元数据在哪里,还需要知道您要使用的Apple代码在哪里。这是链接部分。(看起来您使用的不是Xcode,因为您正在设置自己的run循环,但是在Xcode中,您需要转到项目中的链接框架组并将ApplicationServices添加到其中。)
我猜你在用py2app?恐怕我不是百分之百确定如何做到这一点,但这个问题可能会让你开始:Problem using py2app
希望这能为你指明一个有用的方向。
(顺便说一句,当我用您的代码、Xcode和链接的ApplicationServices框架设置一个项目时,它锁定了我的输入设备,所以我唯一能做的就是重新启动。我可能做错了什么,但请注意,当您链接到此链接时,您正在设置的水龙头可能存在其他问题。您可能希望先尝试使用C/Obj-C完成此操作,然后在知道Python可以工作时再将其转换为Python。)
https://stackoverflow.com/questions/4996085
复制相似问题