2010-04-01 31 views
2

我發佈的iPhone應用程序是一款無線遊戲控制器,它將設備上的觸摸轉換爲聯網Mac上的按鍵。這允許使用iPhone作爲控制器來播放模擬器(例如,Nestopia)遊戲。當然,我發佈的那一天恰逢os x更新。安裝此更新後,模擬按鍵不再適用於Nestopia!更瘋狂的是,當我去到Nestopia的'文件>打開'時,我可以通過點擊我的iphone控制器上的向上箭頭來遍歷文件列表。即模擬按鍵在菜單項中工作,但不在遊戲本身中。下面是我用來模擬密鑰的代碼。鑑於here的變化列表,任何人都可以確定哪個更改會導致此問題?10.6.3 os x更新打破了Nestopia的模擬按鍵

謝謝!

#define UP false 
#define DOWN true 

-(void)sendKey:(CGKeyCode)keycode andKeyDirection:(BOOL)keydirection{ 
    CGEventRef eventRef = CGEventCreateKeyboardEvent(NULL, keycode, keydirection); 
    CGEventPost(kCGSessionEventTap, eventRef); 
    CFRelease(eventRef); 
} 
+0

Lou,請確定你在bugreporter.apple.com上提交了一份Apple報告。點更新真的不應該打破東西。如果可以將問題隔離到可重複的測試應用程序(如果構建這樣的應用程序可能會告訴您需要做什麼才能讓您的工作適用於您),它將增加您直接查看問題的機會。 – Ken 2010-04-01 20:09:33

+0

無論您使用Nestopia還是使用OpenEmu與Nestopia插件,它都會有所作爲嗎? – codewarrior 2010-04-02 09:12:56

+0

@codewarrior:按鍵在OpenEmu中可以正常工作,但是我使用OpenEmu時,控制器的響應時間似乎不太敏感。我相信這是Nestopia在開發過程中成爲我的首選模擬器的結果。我找到了一種解決方法,我將在後面發佈,這樣我就可以繼續使用Nestopia進行演示。唷。 – 2010-04-05 03:41:41

回答

2

的Mac Nestopia的筆者使用的是舊的呼叫,GetKeys(),捕捉關鍵事件。從10.6.3開始,GetKeys不會使用本文詳述的方法捕獲生成的按鍵。我發現的解決方法是使用它來代替:

-(void)sendKey:(CGKeyCode)keycode andKeyDirection:(BOOL)keydirection{ 
    AXUIElementRef axSystemWideElement = AXUIElementCreateSystemWide(); 
    AXError err = AXUIElementPostKeyboardEvent(axSystemWideElement, 0, keycode, keydirection); 
    if (err != kAXErrorSuccess) 
    NSLog(@" Did not post key press!"); 
} 

非常感謝Richard Bannister對他的快速電子郵件回覆!

1

我認爲這是你的代碼問題,與10.6.3。我有一個我正在編寫的應用程序模擬按鍵,我已經升級到10.6.3,我的模擬按鍵仍然工作得很好。

下面是我在做什麼:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); 
CGEventRef keyDownPress = CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, YES); 
CGEventSetFlags(keyDownPress, (CGEventFlags)flags); 
CGEventRef keyUpPress = CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, NO); 

CGEventPost(kCGAnnotatedSessionEventTap, keyDownPress); 
CGEventPost(kCGAnnotatedSessionEventTap, keyUpPress); 

CFRelease(keyDownPress); 
CFRelease(keyUpPress); 
CFRelease(source); 
+0

謝謝,但唉,沒有運氣。只是重申一遍,我發佈的代碼(和你的代碼!)確實模擬了10.6.3中的按鍵;我仍然可以玩Flash遊戲,控制網頁等。這個問題是特定於模擬按鍵到達Nestopia的。在10.5和10.6的所有其他版本中,模擬按鍵按預期控制Nestopia。但在10.6.3中,它好像從不發生。 – 2010-04-01 19:29:03