2011-06-04 28 views
1

我已經在計算器上搜索了很多關於這個話題。而我迄今發現的東西非常有用。但是現在,我得出了一個非常有趣的事實。CGKeyEvent粘貼有斷點的工作,但不能沒有

就我而言,我躲在通過NSApp hide:self

的應用程序,我再一個字符添加到剪貼板,然後嘗試輸入它通過CGEvents最前面的應用程序。我給這家代碼如下:

-(void)applicationDidHide:(NSNotification *)notification{ 
    stringToInsert = @"©"; 

    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; 
    [pasteboard clearContents]; 
    NSArray *copiedObjects = [NSArray arrayWithObject:stringToInsert]; 
    [pasteboard writeObjects:copiedObjects]; 

    //Use CGEvents to "press" Cmd-V 
    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); 
    CGEventRef pasteCommandDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)9, YES); 
    CGEventSetFlags(pasteCommandDown, kCGEventFlagMaskCommand); 
    CGEventRef pasteCommandUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)9, NO); 

    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandDown); 
    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandUp); 

    CFRelease(pasteCommandUp); 
    CFRelease(pasteCommandDown); 
    CFRelease(source); 

} 

問題是,它不希望當我從在Xcode 運行它,而不 breaktpoints插入文本。如果他是不可行的東西,它會讓mac的特徵「plong」變得更加獨特。

但是如果我給方法本身設置了一個斷點,然後一行一行地跳轉,它奇怪地在瞬間插入它。

對不起,我英文不好和我也許壞的文本格式,因爲我是新來的計算器。

如果你能幫助,我將不勝感激!

回答

2

我以前見過這個,我的猜測是,該事件越來越貼太快系統處理(因爲它真的只需要處理比,也就是說,20個關鍵事件,第二個沒有更多)。我猜想,放入類似usleep(100000)(將線程暫停1/10秒)會有很大幫助。

+0

謝謝!可悲的是,它不能直接解決問題,但很高興,它有助於確定問題。我指定了相當長的時間,還有一個0,所以它應該是一秒鐘。然後,我試了一下,發現,重點並沒有真正轉移到下一個窗口。我不知道爲什麼,因爲如前所述,如果我使用斷點,焦點會傳遞到底層窗口。我想知道,因爲當應用程序** didHide **時,整個代碼塊**被**調用**,所以焦點**應該已經改變**。那麼,如何讓焦點改變,然後**調用代碼塊?非常感謝! – JMoVS 2011-06-05 11:27:04

相關問題