Инъекция ключей Mac на экран входа - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над приложением C ++ для удаленного управления, которое отправляет события ввода ключа в macs, когда пользователь на другом компьютере печатает.Ранее приложение использовало устаревший код для ввода ключей:

CGError error = CGPostKeyboardEvent(0, nativeKeyCode, isPressed);

Но у этого были проблемы с клавишами-модификаторами, такими как Caps Lock, и мы хотели обновить код, чтобы он больше не вызывал устаревшие функции.

После некоторых исследований я получил клавишу-модификатор Caps Lock, работающую с использованием не устаревшей функции CGEventCreateKeyboardEvent:

CGEventRef event = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)nativeKeyCode, isPressed);
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);

Однако, когда пользователь из приложения удаленного управления выходит из системыMac и переходит на экран входа Mac, эта функция не работает при вводе пароля на этом экране.Я могу распечатать журналы вокруг каждого оператора, и я поместил все в try-catch, но исключений и других явных ошибок не возникает.Я воспроизвел эту проблему на macOS High Sierra, но она также была воспроизведена на macOS Sierra.

Из того, что я видел в документации Apple , нет способавыполнять проверку ошибок на этих конкретных функциях, кроме проверки, является ли созданное событие нулевым.При тестировании этого сценария event создавался успешно и был не нулевым .

Я искал любую информацию, связанную с этим, но не нашел никого с этой конкретной проблемойна экране входа Mac.Следует отметить, что устаревший код прекрасно работал на экране входа в систему, а текущий код прекрасно работает на экране блокировки и в любом другом месте на Mac;сбой на экране входа в систему происходит только тогда, когда пользователь полностью вышел из системы .

Кто-нибудь еще видел эту проблему и знал о ее решении?Или что-то явно не так с кодом ввода ключа?

1 Ответ

0 голосов
/ 03 декабря 2018

Нашли решение от коллеги, оно было связано с флагами компоновщика, специфичными для экрана входа в систему, и функциями ввода ключа на Mac: Как имитировать события клавиатуры и мыши с помощью CGEventPost в окне входа в Mac OS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...