【问题标题】:How to simulate a low level keypress on os x?如何在 os x 上模拟低级按键?
【发布时间】:2016-07-27 23:58:33
【问题描述】:

我正在尝试以编程方式生成键盘 keydown 和 keyup 事件。我目前正在使用 CGPostKeyboardEvent 来执行此操作,但我正在寻找一种在较低级别执行此操作的方法。我查看了 DDHidLib,但无法找到创建假事件的方法。有人可以帮忙吗?

更新: 感谢 weichsel 的建议,我现在正在创建一个按键事件,其中包含以下内容:

  CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true);
  CGEventPost(kCGSessionEventTap, e);
  CFRelease(e);

我找到了here

但是,我的问题仍然存在,所以我会详细说明一下。我想发送按键的应用程序(第 3 方)实现 DDHidLib's 键捕获功能:

- (void) ddhidKeyboard: (DDHidKeyboard *) keyboard
             keyDown: (unsigned) usageId;

而且永远不会使用当前方法调用它。我的猜测是,使用 CGEventCreateKeyboardEvent 模拟的按键级别太高,无法被 ddhidKeyboard:keyDown 捕获。所以我要做的是在足够低的级别创建keydown事件,以便ddhidKeyboard:keyDown可以识别它。

【问题讨论】:

    标签: c objective-c cocoa macos hid


    【解决方案1】:

    Quartz 事件服务有什么问题?
    我认为你在正确的轨道上,但你应该使用 CGEventCreateKeyboardEvent 而不是 CGPostKeyboardEvent,因为后者自 Mac OS X 10.6 起已被弃用。

    【讨论】:

    • 谢谢!我已根据您的建议更新了帖子,但不幸的是它没有解决我的问题。我提供了有关该问题的更多信息。
    • 嗯。如果实现它的应用程序不是前端进程,ddhidKeyboard 是否可以识别全局按键?
    【解决方案2】:

    【讨论】:

    • 很高兴知道。如果我走这条路,这是否意味着客户在运行我的应用程序时必须进行身份验证?
    • 没有。您可以拥有一个为您运行 launchd 的特权帮助工具。
    猜你喜欢
    • 2017-08-10
    • 2011-01-23
    • 1970-01-01
    • 2011-11-13
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多