最近一直在用 NSPasteboard ,一直上网找太费事, 整理一下 ,数据来源 http://www.cocoachina.com/bbs/read.php?tid=116570&page=1
复制图片,有系统提供的接口,这个简单粗暴而且有效,比遍历数组的好用多了:
NSImage * image = [[NSImagealloc] initWithPasteboard: [NSPasteboardgeneralPasteboard] ];
如何获取粘贴板上的内容
|
比如我对一个文件或者文字执行了command+c,然后我想在程序种获取到复制的内容的相关信息,应该怎么获取哈
|
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; NSArray *types = [pasteboard types]; if ([[pasteboard types] containsObject:NSPasteboardTypeString]) { // s 就是剪切板里的字符串, 如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称 NSString *s = [pasteboard stringForType:NSPasteboardTypeString]; // do something } if ([[pasteboard types] containsObject:NSPasteboardTypePDF]) { NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePDF]; // do something } if ([[pasteboard types] containsObject:NSPasteboardTypePNG]) { NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePNG]; // do something } if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { NSArray *filenames = [pasteboard stringForType:NSFilenamesPboardType]; // do something } // 10.6以后,最好用这些常量 NSString *const NSPasteboardTypeString; NSString *const NSPasteboardTypePDF; NSString *const NSPasteboardTypeTIFF; NSString *const NSPasteboardTypePNG; NSString *const NSPasteboardTypeRTF; NSString *const NSPasteboardTypeRTFD; NSString *const NSPasteboardTypeHTML; NSString *const NSPasteboardTypeTabularText; NSString *const NSPasteboardTypeFont; NSString *const NSPasteboardTypeRuler; NSString *const NSPasteboardTypeColor; NSString *const NSPasteboardTypeSound; NSString *const NSPasteboardTypeMultipleTextSelection; NSString *const NSPasteboardTypeFindPanelSearchOptions; // 获取到文件路径URL, 亲测有效 NSPasteboard *tmpBoard = [NSPasteboard generalPasteboard]; NSArray *tempArray = [tmpBoard pasteboardItems]; for(NSPasteboardItem *tmpItem in tempArray) { NSString *pathString = [tmpItem stringForType:@"public.file-url"]; NSURL *tmpURL = [NSURL URLWithString:pathString]; NSError *error = nil; //跳过隐藏文件 NSArray *children = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:tmpURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:&error]; NSLog(@"%d",[children count]); } // 同样的,不过好像遍历的更加细致, 不知道有什么不同 NSPasteboard *tmpBoard = [NSPasteboard generalPasteboard]; NSArray *tempArray = [tmpBoard pasteboardItems]; for(NSPasteboardItem *tmpItem in tempArray) { NSArray *types = [tmpItem types]; for(NSString *type in types){ NSString *pathString = [tmpItem stringForType:type]; // 如果type是一个public.file-url, 那么url就是一个代表你所复制的文件的路径, 虽然格式有点与该文件的实际路径不一样. NSURL *url = [NSURL URLWithString:pathString]; // 假设你拷贝的文件是一个Image, 你可以直接使用这个url来读取这个image NSImage *image = [[NSImage alloc] initWithContentsOfURL:url]; // 假设你拷贝的是一个text或rtf等NSString支持的文件类型, 你可以直接使用这个url来初始化一个NSString NSString *string = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // 反正不管如何, 这种方式,得到的url它是能代表剪贴板里的文件的, 所以是可以直接使用的 NSLog(@"%@------%@\n",type,pathString); } } |