2013-11-03 65 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

你的代码根本无法访问另一个应用程序 –

相关问题