我正在为 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 更改您的应用程序菜单栏,您还必须提供 MouseEventNumber Integerfield,例如通过
if (type == kCGEventLeftMouseDown) {
eventNumber++;
CGEventSetIntegerValueField (event, kCGMouseEventNumber, eventNumber);
}
if (type == kCGEventLeftMouseUp) {
CGEventSetIntegerValueField (event, kCGMouseEventNumber, eventNumber);
}
关于iphone - 合成点击不会切换应用程序的菜单栏 (Mac OS X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602224/