以编程方式更改Mac光标速度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式更改Mac光标速度相关的知识,希望对你有一定的参考价值。

如果用户按住特定键,我需要降低光标速度以便鼠标精确移动。有没有这样做的API?我试图获得鼠标位置并将其位置设置为一半,但它不起作用。

let mouseLoc = NSEvent.mouseLocation

// get the delta
let deltaX = mouseLoc.x - lastX
let deltaY = mouseLoc.y - lastY

lastX = mouseLoc.x; lastY = mouseLoc.y

// add to the current position by half of the real mouse position
var x = currentMousePos.x + (deltaX / 2)
var y = currentMousePos.y + (deltaY / 2)

// invert the y and set the mouse pos
CGDisplayMoveCursorToPoint(CGMainDisplayID(), carbonPoint(from: currentMousePos))
currentMousePos = NSPoint(x: x, y: y)

你如何改变光标速度?

我看过Mac Mouse/Trackpad Speed Programmatically,但该功能已被弃用。

答案

您可能需要取消光标位置与鼠标的关联,处理事件,并以较慢的速度自己移动光标。

https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/QuartzDisplayServicesConceptual/Articles/MouseCursor.html

CGDisplayHideCursor (kCGNullDirectDisplay);
CGAssociateMouseAndMouseCursorPosition (false);
// ... handle events, move cursor by some scalar of the mouse movement
// ... using CGDisplayMoveCursorToPoint (kCGDirectMainDisplay, ...);
CGAssociateMouseAndMouseCursorPosition (true);
CGDisplayShowCursor (kCGNullDirectDisplay);
另一答案

感谢seths answer这里的基本工作代码:

var shiftPressed = false {
    didSet {
        if oldValue != shiftPressed {
            // disassociate the mouse position if the user is holding shift and associate it if not
            CGAssociateMouseAndMouseCursorPosition(boolean_t(truncating: !shiftPressed as NSNumber));
        }
    }
}

// listen for when the mouse moves
localMouseMonitor = NSEvent.addLocalMonitorForEvents(matching: [.mouseMoved]) { (event: NSEvent) in
    self.updateMouse(eventDeltaX: event.deltaX, eventDeltaY: event.deltaY)
    return event
}

func updateMouse(eventDeltaX: CGFloat, eventDeltaY: CGFloat) {
    let mouseLoc = NSEvent.mouseLocation
    var x = mouseLoc.x, y = mouseLoc.y

    // slow the mouse speed when shift is pressed
    if shiftPressed {
        let speed: CGFloat = 0.1
        // set the x and y based off a percentage of the mouse delta
        x = lastX + (eventDeltaX * speed)
        y = lastY - (eventDeltaY * speed)

        // move the mouse to the new position
        CGDisplayMoveCursorToPoint(CGMainDisplayID(), carbonPoint(from: NSPoint(x: x, y: y)));
    }

    lastX = x
    lastY = y
}

以上是关于以编程方式更改Mac光标速度的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用选项卡更改片段的选项卡索引

显示/隐藏片段并以编程方式更改可见性属性

以编程方式获取链接速度?

以编程方式获取链接速度?

以编程方式滑动时更改 ViewPager2 滚动速度

如何以编程方式更改 Windows 可执行文件和 Mac 应用程序的图标?