【发布时间】:2021-05-18 17:21:40
【问题描述】:
所以我需要能够将鼠标移动到任何给定点(x 和 y)。我正在尝试使用 CGDisplayMoveCursor 来执行此操作,而它移动光标时并没有将其放置在我期望的位置。我的设置中有两台显示器。我通过 NSScreen.screens[i].frame 获取框架,这些是他们的框架。
Built-in Retina Display
NSRect (0.0, 0.0, 1440.0, 900.0)
SwitchResX4 - LG HDR WQHD
NSRect (-1186.0, 900.0, 3840.0, 1600.0)
然后,当我收到新点时,我使用NSRect.contains(NSPoint) 来查找两个监视器中的哪一个包含该点。该部分按预期工作。
但是我想将光标移动到该点,但它没有按您预期的那样工作(光标移动但没有按照您所期望的基于帧的点移动)。这是它的代码。
let point = NSPoint(x: x, y: y)
guard let monitor = Monitor.displayIdWithPoint(point) else {
SendlogCallbackEvent("D", "", "Found nil in monitor with point", #function, #file, #line)
}
if CGDisplayMoveCursorToPoint(monitor.directDisplayId, point) == CGError.failure {
SendlogCallbackEvent("D", "", "CGError.failer to move cursor", #function, #file, #line)
}
我读到这可能与 CG 和 NS 如何以不同的方式处理坐标系有关,但我无法弄清楚如何使其工作。如何将我的 NSPoint“转换”为 CGPoint,使其与 CGDisplayMove... 函数一起使用。或者最好的方法是什么。
【问题讨论】: