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