查找哪个监视器或屏幕包含鼠标指针 - swift,macos

时间:2018-04-03 07:25:13

标签: swift macos screen mouse multiple-monitors

我想找出鼠标所在的显示器,以便在该显示器上创建一个窗口。

这与主屏幕不同,因为NSScreen.main会返回其中有活动窗口的屏幕(一种简单的方法可以判断哪个显示器的菜单栏是不透明的,其他屏幕会略微变暗)。

据我所知,没有直接的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

自从我找到答案后回答我自己的问题 - 这可能对其他人有帮助。

找到鼠标所在的屏幕/显示器并不是很困难,但你必须遍历每个屏幕才能这样做。

Swift 4

func getScreenWithMouse() -> NSScreen? {
  let mouseLocation = NSEvent.mouseLocation
  let screens = NSScreen.screens
  let screenWithMouse = (screens.first { NSMouseInRect(mouseLocation, $0.frame, false) })

  return screenWithMouse
}

目标C

在Objective-C中获得相同结果的类似方法是:

NSPoint mouseLoc = [NSEvent mouseLocation];
NSEnumerator *screenEnum = [[NSScreen screens] objectEnumerator];
NSScreen screen;
while ((screen = [screenEnum nextObject]) && !NSMouseInRect(mouseLoc, 
                                                           [screen frame], NO));