Как имитировать нажатие клавиш низкого уровня на OS X?
-
20-09-2019 - |
Вопрос
Я пытаюсь программно генерировать события нажатия и нажатия клавиш.В настоящее время я использую для этого 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.