在Cocoa中观察屏幕上的全局鼠标位置



当鼠标移动并在屏幕上获取位置时,我希望得到通知。我试过这个:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *event) {
    CGPoint location = [NSEvent mouseLocation];
    NSLog(@"Position: %@", NSStringFromPoint(location));
}];

然而,这似乎只有当鼠标在我的应用程序窗口中时才有效。我一离开就没有接到通知。直到我再次进入窗口。这个活动不应该是全球性的吗?

更新:

我提取了有问题的代码,并制作了一个单独的示例项目(DropboxLink)。可以肯定的是,没有其他干扰。这是一个干净的项目,上面的代码在applicationDidFinishLaunching:中。我得到了同样的结果,这真的很奇怪。我上传了一段视频到youtube:http://www.youtube.com/watch?v=I3AKgmURaMk.

以下是我的观察结果:

  1. 启动应用程序后,无论我将鼠标移到哪里,都不会立即发送任何事件
  2. 单击应用程序的窗口将以某种方式激活事件传递。现在,无论我把鼠标移到哪里,我都会收到NSMouseMovedMask事件(这就是我想要实现的)
  3. 单击返回Xcode不会更改任何内容。我一直在了解事件
  4. 然而,将焦点移回我的应用程序会导致一种奇怪的行为。当我把鼠标移到Xcode上时,我只会在窗口的某些部分看到事件,而某些部分似乎会吸收事件。更具体地说,我不会通过编辑器或日志视图接收事件。我只在将鼠标移动到灰色拆分视图分隔符区域(其中嵌入了选项卡栏)时收到它们

它应该可以工作,当窗口打开但不在前台时,我看到了奇怪的行为。我注意到,如果应用程序在后台,但不在dock中,则只有当鼠标在前台窗口之间转换时,才会收到事件。最小化应用程序似乎可以解决这个问题。。我是可可dev/ojC的新手。。我可能错了,但我注意到,当我最小化应用程序时,我会得到所有事件。

相关内容

  • 没有找到相关文章

最新更新