2010-04-08 74 views
2

我正在爲iPhone平臺開發某種空中鼠標應用程序。這個應用程序連接到一個在Mac OS X上生成鼠標事件的計算機服務。我使用CGEventCreateMouseEvent()和CGEventPost()生成了這個事件。但是我遇到了一個問題。假設您正在使用Safari,然後點擊免費桌面空間。如果您使用普通鼠標進行此操作,它將隱藏Safari的頂部菜單欄並顯示Finder菜單欄。但在這些合成事件中,它並不是那樣。我是否必須發佈其他事件或設置其他屬性?合成點擊不會切換應用程序的菜單欄(Mac OS X)

這裏是我的鼠標了代碼,按下鼠標:

- (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

你可以嘗試CGPostMouseEvent這似乎要解決這些問題,但還有其他的缺點(如高亮不正確的被告席上的圖標。當移動鼠標指針在它的上面,至少在我的機器上。

更新

我想我擁有它。爲了讓搜索cange你的應用程序菜單欄,你也必須交付MouseEventNu mber Integerfield,例如通過

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

謝謝。除第一次嘗試更改活動應用程序外,它正在工作。有什麼建議麼? – Rok 2010-05-11 10:19:14

+0

可能以1的EventNumber開始? – nob 2010-05-12 12:26:19

+0

不,仍然無法正常工作。 – Rok 2010-05-20 09:40:37

1

我嘗試eventNumber = 16384,它的工作原理!但我根本不明白它的意思。