2013-11-03 101 views
1

我可以訪問一般的NSPasteboard。我寫信給我的紙板我的NSData如何在OS X上以編程方式粘貼?

NSPasteboard *pboard = [NSPasteboard generalPasteboard]; 

[pboard clearContents]; 
[pboard setData:newContent forType:type]; 

現在我想編程粘貼。 文本光標在另一個應用的正確位置上閃爍。 正在⌘+ V工作。

有人知道如何? 也許如何粘貼以編程方式調用快捷方式?

回答

3

如果你想在自己的應用程序進行粘貼操作,那麼你可以使用響應鏈發送paste:行動的第一個響應者:

[NSApp sendAction:@selector(paste:) to:nil from:self]; 

文檔說,當你通過nil作爲to:參數會發生什麼:

如果aTarget爲零,sharedApplication將查找可響應消息的對象 - 即實現與anAction匹配的方法的對象。它從關鍵窗口的第一響應者開始。

但是,如果你想在執行粘貼動作與另一應用程序,有做沒有真正的好辦法。你可以期望的最好是執行「假裝」 CMD - v操作,並希望這意味着在目標應用「貼」 ......

#import <Carbon/Carbon.h> 

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); 
CGEventRef pasteCommandDown = CGEventCreateKeyboardEvent(source, kVK_ANSI_V, YES); 
CGEventSetFlags(pasteCommandDown, kCGEventFlagMaskCommand); 

CGEventRef pasteCommandUp = CGEventCreateKeyboardEvent(source, kVK_ANSI_V, NO); 

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

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

正如另一則留言中提到,這這是一個很好的方式來做到這一點。這有點不安全(你並不總是知道什麼cmd - v意味着),而且很危險。

+0

我說的但帶有示例代碼所以+1我猜:) –

+0

謝謝!完美的作品。在'Carbon.h'中是關鍵代碼,所以現在我可以交換* kVK_ANSI _... *和* kCGEventFlagMask ... *,所以每個按鍵都是可能的。 – Binarian

1

假設一個非自定義視圖:

當一個視圖符合複製&膏,它有一個拷貝和粘貼的方法。鑑於鍵盤CMD + V的作品,它確實有貼:作爲方法

call [target paste:nil];

+0

想法是視圖知道如何處理數據。一個textview將得到粘貼板的文本內容並將其附加到它的屬性字符串 –

+0

文本光標在另一個應用程序中。所以我不知道如何獲得目標。更新了問題。 – Binarian

+0

你的代碼根本無法訪問另一個應用程序 –

相關問題