如何在objective-c中将击键发送到另一个进程

如何在objective-c中将击键发送到另一个进程,objective-c,macos,cocoa,keystroke,Objective C,Macos,Cocoa,Keystroke,我知道这里有一些问题,但是我有一个类方法将击键发送到另一个进程,但它似乎部分工作。如果我发送一个@mystring的NSString,我会返回mmmmmm,即第一个字母总是乘以原始字符串的长度。这是我的密码,有人能告诉我我遗漏了什么吗。顺便说一下,字符的NSLog显示缓冲区变量中的正确字符。 我看过的其他问题 1. 二,- 您是否在代码的其他地方,在同一线程上设置了事件点击?如果是,这就是可能发生的情况: 您发布了一个事件,但是应该处理它们并通过事件链发送它们的线程被阻止。所以基本上你发送事件,

我知道这里有一些问题,但是我有一个类方法将击键发送到另一个进程,但它似乎部分工作。如果我发送一个@mystring的NSString,我会返回mmmmmm,即第一个字母总是乘以原始字符串的长度。这是我的密码,有人能告诉我我遗漏了什么吗。顺便说一下,字符的NSLog显示缓冲区变量中的正确字符。 我看过的其他问题 1. 二,-


您是否在代码的其他地方,在同一线程上设置了事件点击?如果是,这就是可能发生的情况:


您发布了一个事件,但是应该处理它们并通过事件链发送它们的线程被阻止。所以基本上你发送事件,同时阻止它们。如果是这种情况,您应该使用计时器并逐个发送事件,以允许事件点击处理您刚才发送的相同事件。

否程序的任何部分都没有设置事件点击。。该程序不用于检查击键或事件,仅用于将其发送到PSN。那么如何调用您的函数?
+(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);
}