Моделирование событий нажатия клавиши в Mac OS X

Я пишу приложение, где я должен моделировать события нажатия клавиши на Mac, учитывая код, который представляет каждый ключ. Кажется, что я должен использовать CGEventCreateKeyboardEvent функция для создания события. Проблема состоит в том, что для этой функции нужен код клавиши Mac, и что я имею, код, который представляет определенный ключ. Так, например, я получаю:

KEY_CODE_SHIFT или KEY_CODE_A - это оба числовые константы, определенные где-нибудь.

Я должен взять эти константы и повернуть их в CGKeyCode значения.

Моя текущая попытка использует код, подобный этому ТАК вопрос. Проблема состоит в том, что это только работает на печатаемые символы. Если бы все остальное перестало работать, я не выше трудного кодирования преобразования, но это означало бы, что мне была бы нужна таблица возможных значений CGKeyCode, которые я еще не смог найти.

Какие-либо идеи?

13
задан Community 23 May 2017 в 11:46
поделиться

1 ответ

Вот код для имитации действия Cmd - S :

CGKeyCode inputKeyCode = kVK_ANSI_S;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef saveCommandDown = CGEventCreateKeyboardEvent(source, inputKeyCode, YES);
CGEventSetFlags(saveCommandDown, kCGEventFlagMaskCommand);
CGEventRef saveCommandUp = CGEventCreateKeyboardEvent(source, inputKeyCode, NO);

CGEventPost(kCGAnnotatedSessionEventTap, saveCommandDown);
CGEventPost(kCGAnnotatedSessionEventTap, saveCommandUp);

CFRelease(saveCommandUp);
CFRelease(saveCommandDown);
CFRelease(source);

A CGKeyCode представляет собой не что иное, как целое число без знака:

typedef uint16_t CGKeyCode;  //From CGRemoteOperation.h

Ваша реальная проблема будет заключаться в преобразовании символа (возможно, NSString ) в код клавиши. К счастью, в проекте Shortcut Recorder есть код, который будет делать именно это, в файле SRKeyCodeTransformer.m . Он отлично подходит для преобразования строки в код клавиши и обратно.

24
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: