Как смоделировать нажатие клавиши низкого уровня на OS X? - PullRequest
8 голосов
/ 21 декабря 2009

Я пытаюсь генерировать события клавиатуры и нажатия клавиш программно. В настоящее время я использую CGPostKeyboardEvent, чтобы сделать это, но я ищу способ сделать это на более низком уровне. Я посмотрел на DDHidLib, но не смог найти способ создать поддельное событие. Кто-нибудь может помочь?

обновление : Благодаря совету Вейкселя я сейчас создаю событие нажатия клавиш со следующим:

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

который я нашел здесь .

Однако , моя проблема все еще остается, поэтому я немного уточню. Приложение (третье лицо), которое я хотел бы отправить по нажатию клавиш, реализует функцию захвата клавиш DDHidLib:

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

И это никогда не вызывается с использованием текущего метода. Я предполагаю, что клавиша down, имитируемая с CGEventCreateKeyboardEvent, находится на слишком высоком уровне, чтобы быть захваченным ddhidKeyboard: keyDown. Поэтому я пытаюсь создать событие keydown на достаточно низком уровне, чтобы оно распознавалось ddhidKeyboard: keyDown.

Ответы [ 2 ]

6 голосов
/ 21 декабря 2009

Что не так с Quartz Event Services?
Я думаю, что вы на правильном пути, но вы должны использовать CGEventCreateKeyboardEvent вместо CGPostKeyboardEvent, потому что последняя устарела с Mac OS X 10.6.

3 голосов
/ 22 декабря 2009

Отводы событий могут вводиться на уровне HID, если вы работаете от имени пользователя root

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

...