我知道这里有一些问题,但我有这个类方法将键击发送到另一个进程,但它似乎部分工作。如果我发送一个@“mystring”的NSString,我会回到“mmmmmmmm”(即总是第一个字母乘以原始字符串的长度倍数)。这是我的代码,可以请有人告诉我我错过了什么。顺便说一句,字符的NSLog显示正确的字符在缓冲区变量中。 我看过的其他问题 1. CGEventCreateKeyboardEvent and CGEventTapLocation 2 .- CGEventPostToPSN - How to send keys with different keyboard locales?
+(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);
}
答案 0 :(得分:0)
您是否在同一个线程中的代码中的其他位置设置了事件?如果是,那就是可能发生的事情:
您发布了一个事件,但是应该处理它们并通过事件链发送它们的线程被阻止。所以基本上你发送事件并同时阻止它们。如果是这种情况,您应该使用计时器并逐个发送事件,以允许您的事件点击处理您刚刚发送的相同事件。