Как имитировать нажатие клавиш низкого уровня на OS X?

StackOverflow https://stackoverflow.com/questions/1938509

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top