4

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

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

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

更新:

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

这些是我的观察:

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

1 回答 1

1

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

于 2013-11-30T16:52:03.290 回答