gpt4 book ai didi

python - 如何在 Mac 上用 Python 监听鼠标事件?

转载 作者:太空狗 更新时间:2023-10-29 20:30:57 31 4
gpt4 key购买 nike

我需要在我的 Mac 上用 Python 编写的应用程序中监听全局鼠标事件(未绑定(bind)到应用程序)。

我正在使用 PyObjC,但我不知道该怎么做。普通 ObjC 示例或其他 Python 技术也很受欢迎。

到目前为止我的代码:

from Quartz import *
def MyFunction(proxy, type, event):
print event

CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)

== 段错误

我知道我需要稍后将它添加到事件源,但我需要先让它工作。

[更新]

使用 PyObjC 形式的 Macports 解决了段错误,所以现在我这样写:

from Quartz import *

def MyFunction(p, t, e, c):
print e

tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)

runLoopSource = CFMachPortCreateRunLoopSource(None, tap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopDefaultMode);
CGEventTapEnable(tap, True);

CFRunLoopRun();

但这只是永远运行并且不响应鼠标事件,有什么问题吗?

最佳答案

CGEventTapCreate 的第四个参数是CGEventMask eventsOfInterest,您给它kCGEventLeftMouseDown,它是_CGEventType 类型的枚举。您需要翻转位掩码中的适当位,而不是整数常量。您可以使用 CGEventMaskBit

执行此操作

所以不是这个:

tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap,
kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)

我们可以这样做:

tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap,
kCGEventTapOptionListenOnly, CGEventMaskBit(kCGEventLeftMouseDown),
MyFunction, None)

或等同于:

tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap,
kCGEventTapOptionListenOnly, (1 << kCGEventLeftMouseDown),
MyFunction, None)

关于python - 如何在 Mac 上用 Python 监听鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337196/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com