Я знаю, что здесь были некоторые вопросы по этому поводу, но у меня есть этот метод класса для отправки нажатий клавиш другому процессу, но, похоже, он работает частично. Если я отправлю NSString @"mystring", я верну "mmmmmmmm" (т.е. всегда первая буква, умноженная на длину исходной строки). Вот мой код, может кто-нибудь сказать мне, что мне не хватает. Кстати NSLog символов показывает правильный символ находящийся в переменной буфера. Другие вопросы, которые я рассмотрел 1. CGEventCreateKeyboardEvent и CGEventTapLocation 2.-CGEventPostToPSN - Как отправлять ключи с разными языковыми настройками клавиатуры?
+(void)writeString:(NSString *)valueToSet withFlags:(int)flags intoProcess:(ProcessSerialNumberPtr) process
{
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
CGEventRef keyEventDown = CGEventCreateKeyboardEvent(source, 1, true);
CGEventRef keyEventUp = CGEventCreateKeyboardEvent(source, 1, false);
CGEventSetFlags(keyEventDown,0);
CGEventSetFlags(keyEventUp,0);
UniChar buffer;
CFRelease(source);
for (int i = 0; i < [valueToSet length]; i++) {
buffer = [valueToSet characterAtIndex:i];
NSLog(@" %i place Character: %c",i,buffer);
CGEventKeyboardSetUnicodeString(keyEventDown, 1, &buffer);
CGEventKeyboardSetUnicodeString(keyEventUp, 1, &buffer);
CGEventSetFlags(keyEventDown,flags);
CGEventPostToPSN(process, keyEventDown);
[NSThread sleepForTimeInterval: 0.01];
CGEventSetFlags(keyEventUp,flags);
CGEventPostToPSN(process, keyEventUp);
[NSThread sleepForTimeInterval: 0.01];
}
CFRelease(keyEventUp);
CFRelease(keyEventDown);
}