2017-01-28 1 views
9

Я пытаюсь имитировать щелчок мыши на симуляторе iphone из приложения macos для этого я использую CGEvents.Как имитировать щелчок мыши от приложения Mac к другому приложению

процесс идентификатор 33554 для iPhone симулятор

let point = CGPoint(x: 500 , y:300) 
let eventMouseDown = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: point, mouseButton: .left) 
let eventMouseUp = CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: point, mouseButton: .left) 
eventMouseDown?.postToPid(33554) 
eventMouseUp?.postToPid(33554) 

Я также заметил, что он имитирует щелчок мыши, когда окно ИОС Тренажер фокусируется и работает только на этой панели инструментов, но не для симулятора, например, если я могу изменить CGPoint к (0.30) будет нажать на опцию Simulator

enter image description here

но когда я даю CGPoints щелкнуть приложение в IOS Simulator ее не работает enter image description here

Однако я могу размещать клавиатуры события в симулятор с помощью

let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true) 
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false) 
keyboardDown?.postToPid(33554) 
keyboardUp?.postToPid(33554) 
+1

Помните, что ось y обращена на MacOS? – Alistra

ответ

1

Вы говорите, что вы можете размещать событие клавиатуры, так что, скорее всего, не разрешение вопроса, но вы можете попробовать выполнение вашего программа как root, чтобы это исключить.

Координаты событий могут отличаться от ожидаемых (перевернуто?). Попробуйте настроить что-то в симулированном приложении, чтобы сообщить о все получили события на уровне приложения.

Кроме того, являются координаты в системе координат экрана? Возможно, событие получено симулятором и отброшено, потому что нет окна «под ним», чтобы доставить его. Попробуйте переместить окно симулятора в каждый угол экрана и использовать что-то вроде (10,10) для координат.

Вы также можете попробовать NSEvent и его метод CGEvent, чтобы получить базовый cgevent, который может быть правильно инициализирован для ваших нужд. Если это сработает, будет легче выработать то, что вам не хватает.

И наконец, попробуйте неnil для mouseEventSource. Может быть, что-то вроде CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);?

Последняя попытка котлован помощью:

У меня есть (старый) приложение макинтош, который отправляет изготовленные события мыши в другие программы; возможно, его source code может показать что-то полезное.

Теперь ... если ничто из этого не поможет, вы можете сказать нам, что именно вы пытаетесь выполнить. Возможно, есть намного лучший способ.

0

сообщение здесь, потому что этот вопрос самый верхний в Google на событие отправки мыши в OS X.

Вы можете посмотреть на рабочий examples лекарственно-н-капли и сделать функцию щелчка.

Только одно примечание, окно, в которое вы собираетесь щелкнуть, должно быть видимым.

0

Вы были близки (Swift 4):

let mousePosition: CGPoint = .zero // your position here 
let mouseEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, 
mouseCursorPosition: mousePosition, mouseButton: .left) 
mouseEvent?.postToPid(33554) 

Важная деталь, которая не сразу понял, что это приложение песочницы должны быть отключены для этого API для работы.

Смежные вопросы