8

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

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

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

我在这里找到的。

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

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

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

4

2 回答 2

6

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

于 2009-12-21T08:33:57.533 回答
3

如果您以 root 身份运行,事件水龙头可以在 HID 级别注入

http://developer.apple.com/mac/library/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/tdef/CGEventTapLocation

于 2009-12-22T08:18:50.420 回答