代码之家  ›  专栏  ›  技术社区  ›  Lou Zell

10.6.3osx更新打破了Nestopia的模拟按键

  •  2
  • Lou Zell  · 技术社区  · 14 年前

    我发布的iPhone应用程序是一个无线游戏控制器,它将设备上的触摸转换成网络Mac上的按键。这允许使用iPhone作为控制器玩模拟器(例如Nestopia)游戏。当然,我发布它的那天恰逢苹果操作系统的更新。安装此更新后,模拟按键在Nestopia中不再工作!更疯狂的是,当我去“文件”>打开'在Nestopia,我可以通过点击我的iphone控制器上的向上箭头循环文件列表;i、 e.模拟按键在菜单项中起作用,但在游戏本身中不起作用。下面是我用来模拟按键的代码。给出了一系列的变化 here

    谢谢!!

    #define UP  false
    #define DOWN true
    
    -(void)sendKey:(CGKeyCode)keycode andKeyDirection:(BOOL)keydirection{
      CGEventRef eventRef = CGEventCreateKeyboardEvent(NULL, keycode, keydirection);
      CGEventPost(kCGSessionEventTap, eventRef);
      CFRelease(eventRef);
    }
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Lou Zell    14 年前

    -(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的快速电子邮件回复!

        2
  •  1
  •   Dave DeLong    14 年前

    我觉得你的代码和

    下面是我要做的:

    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);