2012-05-17 26 views
1

我知道這裏有一些問題,但我有這種類方法發送擊鍵到另一個進程,但它似乎部分工作。如果我發送@「mystring」的NSString,我會返回「mmmmmmmm」(即總是第一個字母乘以原始字符串的長度乘以長度)。這是我的代碼,可以請別人告訴我我缺少的東西。順便說一下,字符的NSLog顯示緩衝區變量中正確的字符。 其他問題我已經看過 1. CGEventCreateKeyboardEvent and CGEventTapLocation 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

相關問題