Я пытаюсь имитировать действие мыши с помощью программирования.Simulate Click and Drag in OS X
Я не в состоянии сделать нажмите и перетащите действие надежно.
Для мыши и тащите я делаю следующие действия в указанном порядке, указанный ниже
- сообщения левой кнопки мыши события в текущей позиции указателя мышей (только один раз)
- Переместить мышь (как мышь вниз событие уже отправлено, оно должно действовать как мышь вниз и перетащить, выбирая текст из начальной позиции мыши)
- Опубликовать левую кнопку мыши, чтобы завершить действие мыши.
В приложениях с яблоками, таких как Xcode или Safari, этот метод не работает надежно (он выделяет текст при перетаскивании, но с помощью фактической мыши я могу выделить текст нажатием и перетаскиванием). Невозможно перетаскивать значки.
Однако в Firefox эта техника работает. Выбор следует за мышью! То есть, когда мы перемещаем указатель мыши, выбор также изменяется соответствующим образом, и это то, что мне нужно.
Ниже приведен код, который я использую для отправки событий касания мыши.
-(void)_sendMouseEvent:(int)mouseEvent withMouseButton:(CGMouseButton)mouseBtn
{
CGEventRef ourEvent = CGEventCreate(NULL);
NSPoint mouseLoc = CGEventGetLocation(ourEvent); //get current mouse position
CGEventRef mouseClick = CGEventCreateMouseEvent(
NULL,
mouseEvent,
mouseLoc,
mouseBtn
);
CGEventPost(kCGHIDEventTap, mouseClick);
CFRelease(ourEvent);
CFRelease(mouseClick);
}
Я попытался отправить события мыши вниз через регулярные промежутки времени, но не изменился.
Есть ли у вас идеи о том, что я делаю неправильно? Пожалуйста, предложите любые обходные пути, которые приходят вам на ум.
Как вы это точно реализуете, я имею в виду, какое место вы переходите в mouseLoc? просто текущая позиция, которую он не перетаскивает. –
Присутствует настоящая мышь, и только это делает этот код, так это то, что он стимулирует нажатие кнопки и инициирует событие перетаскивания 'kCGEventLeftMouseDragged'. Поэтому после отправки перетаскиваемых и нажатых кнопок события **, указатель перемещается фактической мышью **. Когда мышь перемещается после отправки событий, выбранный объект перемещается в текущую позицию указателя или выбирает текст (щелчок и перетаскивание). Как только перетаскивание заканчивается, выдается сообщение о выпуске кнопки и перетаскивание остановленных событий. – matt007
поэтому мне нужно отправить> = 3 события: kCGEventLeftMouseDown (start_x, start_y), n x kCGEventLeftMouseDragged (i <= n, end_i_x, end_ i_y), kCGEventLeftMouseUp (end_n_x, end_n_y). Я написал это, и это работает, но мне нужно спать между mouse_down, mouse_drag, mouse_drag, mouse_up не менее 10 мс! Если я не сплю, это не сработает правильно. Зачем? –