如何在OS X上模拟低级按键?

8
我正在尝试以编程方式生成键盘按下和松开事件。我目前使用CGPostKeyboardEvent来实现,但我正在寻找一种更低级别的方法。我已经查看了DDHidLib,但无法找到创建虚拟事件的方法。有人能帮忙吗?
更新: 感谢weichsel的建议,我现在正在使用以下方法创建按键按下事件:
  CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true);
  CGEventPost(kCGSessionEventTap, e);
  CFRelease(e);

我在这里找到了此内容

然而,我的问题仍然存在,所以我会详细说明一下。我想发送按键到第三方应用程序中,该应用程序实现了DDHidLib的按键捕获功能:

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

当前方法不会调用此函数。我的猜测是,使用CGEventCreateKeyboardEvent模拟的按键按下在太高的级别上,无法被ddhidKeyboard:keyDown捕获。因此,我正在尝试在足够低的级别上创建按键按下事件,以便它将被ddhidKeyboard:keyDown识别。

2个回答

6

Quartz Event Services有什么问题?
我认为你正在正确的方向上努力,但是你应该使用CGEventCreateKeyboardEvent而不是CGPostKeyboardEvent,因为后者自Mac OS X 10.6已经被弃用了。


谢谢!我已经根据您的建议更新了帖子,但不幸的是它并没有解决我的问题。我提供了一些关于这个问题的更多信息。 - Lou
1
嗯。如果实现它的应用程序不是前台进程,ddhidKeyboard是否识别全局按键? - Thomas Zoechling

3

了解到了。如果我选择这种方式,那么这是否意味着每次客户运行我的应用程序时都需要进行身份验证? - Lou
不可以。你可以拥有一个特权辅助工具,由launchd为你运行。 - Azeem.Butt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接