Я разрабатываю какое-то приложение для мыши на платформе iPhone. Это приложение подключается к одному компьютерному сервису, который генерирует события мыши в Mac OS X. Я генерирую эти события с помощью CGEventCreateMouseEvent () и CGEventPost (). Но я столкнулся с одной проблемой. Допустим, вы используете Safari, а затем нажимаете на свободное место на рабочем столе. Если вы сделаете это с помощью обычной мыши, она скроет верхнюю строку меню Safari и покажет строку меню Finder. Но на этих синтетических событиях это не действует так. Нужно ли публиковать какие-либо другие события или устанавливать дополнительные свойства?
Вот мой код для мышки вверх, мышка вниз:
- (void)mouseUp:(int)button {
int type = (button == LEFT_BUTTON) ? kCGEventLeftMouseUp : kCGEventRightMouseUp;
int mouseButton = (button == LEFT_BUTTON) ? kCGMouseButtonLeft : kCGMouseButtonRight;
leftMouseDown = (button == LEFT_BUTTON) ? NO : leftMouseDown;
rightMouseDown = (button == RIGHT_BUTTON) ? NO : rightMouseDown;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef event = CGEventCreateMouseEvent (source, type, CGSCurrentInputPointerPosition(), mouseButton);
CGEventSetType(event, type);
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
}
- (void)mouseDown:(int)button {
int type = (button == LEFT_BUTTON) ? kCGEventLeftMouseDown : kCGEventRightMouseDown;
int mouseButton = (button == LEFT_BUTTON) ? kCGMouseButtonLeft : kCGMouseButtonRight;
leftMouseDown = (button == LEFT_BUTTON) ? YES : leftMouseDown;
rightMouseDown = (button == RIGHT_BUTTON) ? YES : rightMouseDown;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef event = CGEventCreateMouseEvent (source, type, CGSCurrentInputPointerPosition(), mouseButton);
CGEventSetType(event, type);
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
}