有没有办法在 Cocoa 中注册全局鼠标移动事件?我能够使用 Carbon's 注册活动InstallEventHandler()
,但更喜欢 Cocoa 等价物。我已经查找了NSNotificationCenter
活动,但似乎没有任何公共活动名称(有私人活动名称吗?)
或者,有没有办法NSTrackingArea
用于具有clearColor
背景的视图?
该应用程序仅是雪豹。
有没有办法在 Cocoa 中注册全局鼠标移动事件?我能够使用 Carbon's 注册活动InstallEventHandler()
,但更喜欢 Cocoa 等价物。我已经查找了NSNotificationCenter
活动,但似乎没有任何公共活动名称(有私人活动名称吗?)
或者,有没有办法NSTrackingArea
用于具有clearColor
背景的视图?
该应用程序仅是雪豹。
在 SnowLeopard 中有一个新的类方法,NSEvent
它完全可以满足您的需求:+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
. 你会想要mask = NSMouseMovedMask
的。
StackOverflow 上已经提出了一个类似的问题: 如何使透明的 NSView 子类处理鼠标事件?
总而言之,透明视图方法不起作用。Quartz Event Taps 似乎是最好的答案。
以下是使用水龙头的一些提示:
使用 创建水龙头CGEventTapCreate
。
a) 对于您可能想要使用的位置(第一个)参数kCGSessionEventTap
。
b) 对于您可能需要的位置(第二个)参数kCGHeadInsertEventTap
。
c) 对于事件掩码参数,请尝试(1 << kCGEventMouseMoved)
。
创建一个带有 的运行循环源CFMachPortCreateRunLoopSource
,将事件点击作为第二个参数传递。
将运行循环源添加到你的运行循环。假设您希望将其添加到主运行循环中,请执行以下操作:
CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);
启用事件点击CGEventTapEnable
如果你想跟踪鼠标,无论它在哪里,你都需要一个 CGEventTap。没有可可等价物。如果您只想在应用程序中跟踪它,那么您应该更彻底地解释为什么您发现自己无法做到这一点。