2010-10-12 47 views
0

我目前正在編寫一個應用程序,它模擬Mac OSX中的按鍵事件來控制ioquake3。我目前的做法是使用Quartz Event Services創建關鍵的新聞事件。這適用於例如文本編輯,但不與ioquake3。在Mac OSX中爲ioquake3模擬按鍵事件

CGKeyCode keyCode = 126; // 126 is the "up" key 
CGEventRef event1 = CGEventCreateKeyboardEvent (NULL, keyCode, true); 
CGEventPost(kCGSessionEventTap, event1); 
// CGEventPost(kCGHIDEventTap, event1); 
// CGEventPost(kCGAnnotatedSessionEventTap, event1); 
CFRelease(event1); 

CGEventRef event2 = CGEventCreateKeyboardEvent (NULL, keyCode, false); 
CGEventPost(kCGSessionEventTap, event2); 
// CGEventPost(kCGHIDEventTap, event2); 
// CGEventPost(kCGAnnotatedSessionEventTap, event2); 
CFRelease(event2); 

我也嘗試使用下面的代碼來模擬按鍵在本post提到:

CGKeyCode keyCode = 126; // 126 is the "up" key 
AXUIElementRef axSystemWideElement = AXUIElementCreateSystemWide(); 
AXUIElementPostKeyboardEvent(axSystemWideElement, 0, keyCode, true); 
AXUIElementPostKeyboardEvent(axSystemWideElement, 0, keyCode, false); 

是否有另一種方式來創建在Mac OSX上的按鍵事件,其被ioquake3認可?

回答

2

我解決我的問題,大家誰是興趣,這裏是解決方案:

,我將介紹一個簡單的例子,這使得事情說清楚。如前所述,我使用Quartz Event Services來生成按鍵事件。如果你想不斷移動ioquake3中的角色,你必須不斷地產生關鍵的「失敗」事件,就像這樣。

CGKeyCode keyCode = 126; 
CGEventRef eventRef = CGEventCreateKeyboardEvent (NULL, keyCode, true); 
CGEventPost(kCGSessionEventTap, eventRef); 
CFRelease(eventRef); 

如果你想停止的字符,你必須生成一個密鑰「向上」事件:

CGKeyCode keyCode = 126; 
CGEventRef eventRef = CGEventCreateKeyboardEvent (NULL, keyCode, false); 
CGEventPost(kCGSessionEventTap, eventRef); 
CFRelease(eventRef); 

顯然,我不知道如何使用按鍵事件以正確的方式。

+0

非常感謝!我的問題也解決了。 – SevenDays 2012-01-10 13:43:30