Iphone 合成点击不';t开关应用';s菜单栏(Mac OS X)

Iphone 合成点击不';t开关应用';s菜单栏(Mac OS X),iphone,macos,events,mouse,click,Iphone,Macos,Events,Mouse,Click,我正在为iPhone平台开发某种空中鼠标应用程序。此应用程序连接到一个在Mac OS X上生成鼠标事件的计算机服务。我使用CGEventCreateMouseEvent()和CGEventPost()生成此事件。但我遇到了一个问题。假设您正在使用Safari,然后单击“空闲桌面空间”。如果你用普通鼠标操作,它会隐藏Safari的顶部菜单栏并显示Finder菜单栏。但在这些合成事件中,它并不是这样的。我是否必须发布其他事件或设置其他属性 这是我的上下鼠标代码: - (void)mouseUp:(i

我正在为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);
}

您可以尝试CGPostMouseEvent,它似乎可以解决这些问题,但也有其他缺点(例如,当将指针移到基座上时,至少在我的机器上,无法正确突出显示基座上的图标)

更新

我想我已经有了。为了让Finder可以浏览你的应用程序菜单栏,你还必须提供mouseeventnumberintegerfield,例如

if (type == kCGEventLeftMouseDown) {
   eventNumber++;
   CGEventSetIntegerValueField (event, kCGMouseEventNumber, eventNumber);
}
if (type == kCGEventLeftMouseUp) {
   CGEventSetIntegerValueField (event, kCGMouseEventNumber, eventNumber);
}

我尝试使用eventNumber=16384,它可以工作!但我不明白它的意思。

谢谢。除了第一次尝试更改活动应用程序外,它还可以工作。有什么建议吗?可能从eventNumber 1开始?