我正在为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);
}
答案 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并且它有效!但我根本不明白这意味着什么。