2012-08-24 48 views
4

我希望在鼠标移动并获取屏幕位置时收到通知。我试过这个:在Cocoa屏幕上观察全局鼠标位置?

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

但是,只要鼠标在我的应用程序的窗口中,这似乎只工作。一旦离开,我不会收到通知。直到我再次进入窗口。这个活动不应该是全球性的吗?

UPDATE:

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

这是我的意见:

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

是的,它应该在你的应用程序之外工作,我不知道它为什么不是你。如果您想查看鼠标移动(不拖动),请尝试使用NSMouseMovedMask。在我手中,它不会开始监控,直到我点击某处,无论是在应用程序内还是在应用程序外。 – rdelmar

+0

你确定那段代码正在运行(使用NSLog的或断点)? – TheAmateurProgrammer

+0

@rdelmar对不起,我实际上是在使用NSMouseMovedMask。我修正了这一点。业余程序员是的,我登录了它。事件监视器被添加。但它随机似乎停止工作。我认为这是当我将鼠标移动到某些其他窗口时。像Xcode或消息。将鼠标移动到墙纸上即可注册。很奇怪。 – DrummerB

回答

1

它应该可以工作,当窗口打开但不在前景时,我看到了奇怪的行为。我注意到,如果应用程序位于后台,但不在扩展坞中,则只有当鼠标在前景中的窗口之间转换时才会发生事件。尽量减少应用程序似乎解决了这个问题..我在可可开发/ ObjC非常新..我可能是错的,但我注意到,当我最小化我的应用程序,我得到的所有事件。

相关问题