это мой первый пост, дайте мне знать, если что-то нужно отредактировать.
В настоящее время у меня есть функция, которая будет возвращать код виртуальной клавиши клавиатуры Apple, передавая ей символ; CGKeyCode keyCodeForChar()
, это работает, и я проверил результаты по различным веб-источникам.
Локальная строка, такая как NSString *myString = @"Hello World!"
, разбивается, и каждый символ обрабатывается, CGKeyCode извлекается и пытается быть записанным с использованием CGEventPost()
. Это работает, однако в моей попытке определить правильные флаги, когда буква должна быть заглавной, вся строка печатается как нижний регистр. Это мой код на данный момент:
NSString *myString = @"Hello World!";
if (![self.view.window isKeyWindow])
{
for (int i = 0; i < myString.length; i++)
{
char c = [theString characterAtIndex:i];
CGKeyCode keyCode = keyCodeForChar(c);
CGEventRef event;
CGEventFlags flags = kCGEventFlagMaskShift;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
// Key down event
event = CGEventCreateKeyboardEvent(source, keyCode, true);
CGEventSetFlags(event, (flags & CGEventGetFlags(event)));
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
// Key up event
event = CGEventCreateKeyboardEvent(source, keyCode, false);
CGEventSetFlags(event, (flags & CGEventGetFlags(event)));
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
CFRelease(source);
}
}
В настоящее время вывод - hello world1
, 1 из того же CGKeyCode, что и '!'. Поэтому я считаю, что мое определение правильной маски флага неверно. Я рассмотрел подобные вопросы, заданные здесь, например:
Получение клавиши-модификатора, нажатой при нажатии CGEvent
CGEventPost - возможная ошибка при имитации событий клавиатуры?
Однако решения там не сработали для меня, если бы кто-нибудь мог помочь мне с тем, где я ошибаюсь, это было бы великолепно!
Спасибо, Крейг