Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simulate mouse wheel on macOS (swift or objc)

I'm using the following code to simulate mouse click event

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)
}

What is similar way to simulate mouse wheel scroll events?

like image 836
Ivan Makhnyk Avatar asked Oct 29 '25 07:10

Ivan Makhnyk


1 Answers

Thanks to Willeke new event constructor was added starting from 10.13.

Here is the my solution but it works only for macOS version >= 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
    }
}
like image 170
Ivan Makhnyk Avatar answered Oct 31 '25 02:10

Ivan Makhnyk