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?
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
    }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With