我一般都能接触到NSPasteboard
。我在粘贴板上写了我的NSData
.
NSPasteboard *pboard = [NSPasteboard generalPasteboard];
[pboard clearContents];
[pboard setData:newContent forType:type];
现在我想以编程方式粘贴。文本光标在另一个应用程序中的正确位置闪烁。按 ⌘ + V 有效。
有人知道怎么做吗?也许如何以编程方式调用快捷方式粘贴?
我一般都能接触到NSPasteboard
。我在粘贴板上写了我的NSData
.
NSPasteboard *pboard = [NSPasteboard generalPasteboard];
[pboard clearContents];
[pboard setData:newContent forType:type];
现在我想以编程方式粘贴。文本光标在另一个应用程序中的正确位置闪烁。按 ⌘ + V 有效。
有人知道怎么做吗?也许如何以编程方式调用快捷方式粘贴?
如果您想在自己的应用程序中执行粘贴操作,则可以使用响应者链将paste:
操作发送给第一响应者:
[NSApp sendAction:@selector(paste:) to:nil from:self];
文档说明了当您nil
作为to:
参数传递时会发生什么:
如果aTarget 为nil,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意思)并且非常hackish。
假设一个非自定义视图:
当视图符合复制和粘贴时,它具有复制和粘贴方法。鉴于键盘 cmd+v 有效,它确实有 paste: 作为一种方法
call [target paste:nil];