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

标签 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);
}

最佳答案

您可以尝试 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/

相关文章:

java - 在 OS X 上编辑应用程序菜单

linux - 有没有办法让 PostgreSQL 在使用某种语言进行整理时不折叠标点符号和空格?

macos - USB,火线和串行端口的唯一设备标识符

java - Swing:如何实现子组件的所有事件转发到父容器?

html - xcode 中的 html 警报事件

iphone - 如何确定当前连接的 wifi 在 iPhone 或 iPad 中是否安全

iphone - 在新线程上设置本地通知?

iphone - 在启动时调用选项卡栏的 View 方法

iphone - iPhone 上的 Web 应用程序 - 将其样式设置为看起来像 native iPhone 应用程序

WPF ListBox OnScroll事件