Симулировать мышь на Mac - PullRequest
       13

Симулировать мышь на Mac

3 голосов
/ 26 февраля 2010

У меня есть виртуальный трекпад на моем iPhone, и для перемещения мыши я использую:


CGDisplayMoveCursorToPoint(kCGDirectMainDisplay, CGPointMake(((float)aD.msg)+location.x, ((float)aD.msg2)+location.y));

Работает хорошо, но это не настоящая мышь, потому что, когда я помещаю свою мышь в скрытую док-станцию, эта не отображает ее самостоятельно Я не понимаю почему. Более того, я попытался смоделировать щелчок мышью с помощью:

<code>
case MOUSECLICK:
[self postMouseEventWithButton:0 withType:kCGEventLeftMouseDown andPoint:CGEventGetLocation(CGEventCreate(NULL))];
[self postMouseEventWithButton:0 withType:kCGEventLeftMouseUp andPoint:CGEventGetLocation(CGEventCreate(NULL))];</p>

<p>// *********************</p>

<p>-(void)postMouseEventWithButton:(CGMouseButton)b withType:(CGEventType)t andPoint:(CGPoint)p
{
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, t, p, b);
    CGEventSetType(theEvent, t);
    CGEventPost(kCGHIDEventTap, theEvent);
    CFRelease(theEvent);
}

Это хороший метод? Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 11 марта 2010

CGDisplayMoveCursorToPoint() только перемещает изображение курсора, оно не генерирует никаких событий. Вы должны создавать и публиковать события мыши типа kCGEventMouseMoved, чтобы имитировать движение мыши. Ваш собственный метод сделает это:

[self postMouseEventWithButton:0 withType:kCGEventMouseMoved andPoint:point];

Для кликов, вы уже делаете это правильно, я думаю. Одна вещь, которую вы также должны сделать, это правильно установить количество кликов для событий мыши и вверх, например:

CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);

... потому что это нужно некоторым приложениям.

(См. Также Моделирование щелчков мыши в Mac OS X не работает для некоторых приложений )

Если ваш код не работает, я не уверен почему; это выглядит хорошо для меня. Попробуйте опубликовать на kCGSessionEventTap вместо kCGHIDEventTap и посмотреть, поможет ли это. Кроме того, вам не нужен вызов CGEventSetType(), так как тип уже установлен в вызове создания.

...