有没有办法在Cocoa中注册全局鼠标移动事件?我能够使用Carbon的InstallEventHandler()注册事件,但更喜欢Cocoa的等价物。我已经查找了NSNotificationCenter事件,但似乎没有任何公共事件名称(有私有名称吗?)

或者,有没有办法将NSTrackingArea用于带有clearColor背景的视图?

该应用仅限Snow Leopard。

有帮助吗?

解决方案

在SnowLeopard中,NSEvent上有一个新的类方法,它可以完全符合您的要求:+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block。你<!>#8217;我想要mask = NSMouseMovedMask

其他提示

StackOverflow上已经提出了类似的问题: 如何制作透明的NSView子类句柄鼠标事件?

总而言之,tansparent视图方法不起作用。 Quartz Event Taps似乎是最好的答案。

以下是使用水龙头的一些提示:

  1. 使用CGEventTapCreate创建水龙头。
    a)对于位置(第一个)参数,您可能希望使用kCGSessionEventTap
    b)对于放置(第二)参数,您可能需要kCGHeadInsertEventTap
    c)对于事件掩码参数,请尝试(1 << kCGEventMouseMoved)

  2. 使用CFMachPortCreateRunLoopSource创建一个运行循环源,将事件抽头作为第二个参数传递。

  3. 将运行循环源添加到运行循环中。假设您希望将其添加到主运行循环中,请执行以下操作: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. 使用CGEventTapEnable

  5. 启用事件点按

如果您想跟踪鼠标,无论它在哪里,您都需要一个CGEventTap。没有Cocoa等价物。如果您只想在应用程序中跟踪它,那么您应该解释为什么您发现自己无法更彻底地这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top