това е първата ми публикация, така че, моля, уведомете ме, ако нещо има нужда от редактиране.
В момента имам функция, която ще върне кода на виртуалния клавиш на клавиатура на Apple, като й предаде char; 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 – възможна грешка при симулиране на събития от клавиатурата?
Въпреки това решенията там не са работили за мен, ако някой може да ми помогне с това къде греша, това би било брилянтно!
Благодаря ти, Крейг