在macOS(swift或objc)上模拟鼠标滚轮

时间:2018-07-25 12:48:01

标签: objective-c swift macos simulation mousewheel

我正在使用以下代码来模拟鼠标单击事件

public class func leftMouseDown(onPoint point: CGPoint) {

    guard let downEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: point, mouseButton: .left) else {
        return
    }

    downEvent.setIntegerValueField(CGEventField.eventSourceUserData, value: 1)

    downEvent.post(tap: CGEventTapLocation.cghidEventTap)
}

public class func leftMouseUp(onPoint point: CGPoint) {

    guard let upEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: point, mouseButton: .left) else {
        return
    }

    upEvent.setIntegerValueField(CGEventField.eventSourceUserData, value: 1)

    upEvent.post(tap: CGEventTapLocation.cghidEventTap)
}

模拟鼠标滚轮滚动事件的相似方法是什么?

1 个答案:

答案 0 :(得分:1)

感谢Willeke从10.13开始添加了新的事件构造函数。

这是我的解决方案,但仅适用于macOS版本== 10.13

public class func scrollMouse(onPoint point: CGPoint, xLines: Int, yLines: Int) {
    if #available(OSX 10.13, *) {
        guard let scrollEvent = CGEvent(scrollWheelEvent2Source: nil, units: CGScrollEventUnit.line, wheelCount: 2, wheel1: Int32(yLines), wheel2: Int32(xLines), wheel3: 0) else {
            return
        }
        scrollEvent.setIntegerValueField(CGEventField.eventSourceUserData, value: 1)
        scrollEvent.post(tap: CGEventTapLocation.cghidEventTap)
    } else {
        // scroll event is not supported for macOS older than 10.13
    }
}