Я пишу приложение, где я должен моделировать события нажатия клавиши на Mac, учитывая код, который представляет каждый ключ. Кажется, что я должен использовать CGEventCreateKeyboardEvent
функция для создания события. Проблема состоит в том, что для этой функции нужен код клавиши Mac, и что я имею, код, который представляет определенный ключ. Так, например, я получаю:
KEY_CODE_SHIFT
или KEY_CODE_A
- это оба числовые константы, определенные где-нибудь.
Я должен взять эти константы и повернуть их в CGKeyCode
значения.
Моя текущая попытка использует код, подобный этому ТАК вопрос. Проблема состоит в том, что это только работает на печатаемые символы. Если бы все остальное перестало работать, я не выше трудного кодирования преобразования, но это означало бы, что мне была бы нужна таблица возможных значений CGKeyCode, которые я еще не смог найти.
Какие-либо идеи?
Вот код для имитации действия 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
. Он отлично подходит для преобразования строки в код клавиши и обратно.