Я пытаюсь написать кусок кода, который перемещает курсор мыши на экране в указанное место.Вот несколько способов, которыми я пытался добиться этого:
Код ниже используется во всех попытках (песочница отключена):
let mouseCursorPosition = CGPoint.zero;
CGAssociateMouseAndMouseCursorPosition(1)
Попытка 1:
CGWarpMouseCursorPosition(mouseCursorPosition)
Попытка 2:
CGDisplayMoveCursorToPoint(CGMainDisplayID(), CGPoint.zero)
Попытка 3:
let moveEvent = CGEvent(mouseEventSource: nil, mouseType: CGEventType.mouseMoved, mouseCursorPosition: mouseCursorPosition,
mouseButton: CGMouseButton.left)
moveEvent?.post(tap: CGEventTapLocation.cghidEventTap)
Ожидаемое поведение: обновите положение мыши вместе с курсором на экране.
Каждая попытка до сих пор работает, как ожидалось, если вызывается непосредственно внутри viewDidLoad()
.Курсор перемещается в требуемое место на экране, как только приложение загружается.Тем не менее, все становится немного странным, когда вызывается внутри scheduledTimer
.Используя код ниже:
class ViewController: NSViewController {
var mouseTimer: Timer!
override func viewDidLoad() {
super.viewDidLoad()
mouseTimer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(moveCursor), userInfo: nil, repeats: true)
}
@objc func moveCursor() {
print(NSDate().timeIntervalSince1970)
let mouseCursorPosition = CGPoint.zero;
CGAssociateMouseAndMouseCursorPosition(1)
//insert attempt code here
}
}
Метод moveCursor
вызывается каждые 5 секунд (отметка времени появляется каждый раз), однако курсор не перемещается на экране, пока я не перемещаю физическоемышь.Однако, когда я перемещаю мышь, курсор сначала привязывается к последней позиции скрипта.Кажется, что происходит то, что сценарий местоположения зарегистрирован, однако он не обновляется на экране до тех пор, пока не будет запущено какое-либо событие обновления.
Будем весьма признательны за любые мысли по этому поводу.