【问题标题】:Simulate key press events for ioquake3 in Mac OSX在 Mac OSX 中模拟 ioquake3 的按键事件
【发布时间】:2011-04-24 09:18:06
【问题描述】:

我目前正在编写一个应用程序来模拟 Mac OSX 中的按键事件来控制 ioquake3。我目前的方法是使用 Quartz Event Services 创建按键事件。这适用于例如TextEdit 但不使用 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 识别的按键事件吗?

【问题讨论】:

    标签: c++ objective-c cocoa macos


    【解决方案1】:

    我解决了我的问题,大家有兴趣,这里是解决方案:

    我将描述一个简单的例子,让事情变得清晰。如前所述,我使用 Quartz 事件服务来生成按键事件。如果你想让ioquake3中的角色不断向前移动,你必须不断产生key“down”事件,像这样。

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

    显然我不明白如何以正确的方式使用按键事件。

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多