合成点击不会切换应用程序的菜单栏(Mac OS X)

时间:2010-04-08 17:47:16

标签: iphone macos events mouse click

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

2 个答案:

答案 0 :(得分:2)

您可以尝试CGPostMouseEvent,它似乎可以解决这些问题,但还有其它方面的缺点。(例如,当将指针移到它上面时,至少在我的机器上没有突出显示底座上的图标。

<强>更新

我想我拥有它。为了让Finder整理您的应用程序菜单栏,您还必须提供MouseEventNumber Integerfield,例如:由

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

答案 1 :(得分:1)

我尝试eventNumber = 16384并且它有效!但我根本不明白这意味着什么。