2012-05-17 2 views
1

여기에 대해 몇 가지 질문이 있지만이 클래스 메서드를 사용하여 다른 프로세스에 키 입력을 보낼 수 있지만 부분적으로 작동하는 것으로 보입니다. @ "mystring"의 NSString을 보내면 "mmmmmmmm"이 반환됩니다 (즉, 항상 원래 문자열의 길이 곱한 첫 글자). 여기에 내 코드가있다. 누군가 내가 무엇을 놓치고 있는지 말해 줄 수있다. 그건 그렇고 NSLog 문자의 버퍼 변수에 올바른 문자를 보여줍니다. 당신은 이벤트 탭이 동일한 스레드에서, 코드에서 다른 곳으로 설정해야합니까 다른 질문은 내가 2 .- CGEventPostToPSN - How to send keys with different keyboard locales?objective-c의 다른 프로세스에 키 입력을 보내는 방법

+(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

아니요 프로그램의 어떤 부분에도 이벤트 탭이 설정되어 있지 않습니다.이 프로그램은 키 입력이나 이벤트 만 확인하여 PSN으로 전송하지 않습니다. – AnonymousPlayer

관련 문제