MacOS 开发

来源:互联网 发布:网络招投标系统 编辑:程序博客网 时间:2024/06/10 10:46

  • 复制内容到剪贴板
  • 获得剪贴板的内容
  • 获取不同类型的剪贴板内容
    • 粘贴板类型
    • 获取方法
  • 其他
  • 参考资料


复制内容到剪贴板

复制文字

- (void)pasteString{    NSPasteboard *paste = [NSPasteboard generalPasteboard];    [paste clearContents];    [paste writeObjects:@[@"123"]];}
  • 复制前,最好清空剪贴板,否则可能复制失败。
  • 注意,并非
    [[NSPasteboard generalPasteboard] writeFileContents:@"123"];
  • 可以同时复制多个字符串,获取时,会换行分格输出所有。

获得剪贴板的内容

获得文字
- 如果你拷贝的是文件里面的文字,剪切板里保存是刚复制的字符串,;
- 如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称

- (void)getPasteString{    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];    if ([[pasteboard types] containsObject:NSPasteboardTypeString]) {        NSString *str = [pasteboard stringForType:NSPasteboardTypeString];        NSLog(@"粘贴的文字:%@",str);    }}

获取不同类型的剪贴板内容

粘贴板类型

NSPasteboardTypeString;NSPasteboardTypePDF;NSPasteboardTypeTIFF;NSPasteboardTypePNG;NSPasteboardTypeRTF;NSPasteboardTypeRTFD;NSPasteboardTypeHTML;NSPasteboardTypeTabularText;NSPasteboardTypeFont;NSPasteboardTypeRuler;NSPasteboardTypeColor;NSPasteboardTypeSound;NSPasteboardTypeMultipleTextSelection;NSPasteboardTypeFindPanelSearchOptions;

获取方法

- (void)getPasteboard{    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];    NSArray *types = [pasteboard types];    NSLog(@"types : %@",types);    if ([[pasteboard types] containsObject:NSPasteboardTypeString]) {        //如果你拷贝的是文件里面的文字,剪切板里保存是刚复制的字符串,;        //如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称        NSString *str = [pasteboard stringForType:NSPasteboardTypeString];        NSLog(@"NSPasteboardTypeString : %@",str);    }    if ([[pasteboard types] containsObject:NSPasteboardTypePDF]) {        NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePDF];        if (pdfData) {            NSLog(@"NSPasteboardTypePDF:获取成功");        }    }    if ([[pasteboard types] containsObject:NSPasteboardTypePNG]) {        NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePNG];        NSImage *img = [[NSImage alloc]initWithData:pdfData];        if (img) {            NSLog(@"NSPasteboardTypePNG:获取成功");            self.imgView.image = img;        }    }    if ([[pasteboard types] containsObject:NSFilenamesPboardType]) {        NSArray *filenames = [pasteboard stringForType:NSFilenamesPboardType];        NSLog(@"NSFilenamesPboardType : %@",filenames);//xml 格式    }    // 获取到文件路径URL, 亲测有效    NSArray *tempArray = [pasteboard pasteboardItems];    NSLog(@"pasteboardItems:%@",tempArray);    for(NSPasteboardItem *tmpItem in tempArray){        NSString *pathString = [tmpItem stringForType:@"public.file-url"];        NSURL *tmpURL = [NSURL URLWithString:pathString];        NSError *error = nil;        if (tmpURL) {            //跳过隐藏文件,获取到的直接子文件数量(不包含子文件中的子文件)            NSArray *children = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:tmpURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:&error];            NSLog(@"children:%d",[children count]);        }    }    // 同样的,不过好像遍历的更加细致, 不知道有什么不同    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];            if (image) {                self.imgView.image = image;            }            // 假设你拷贝的是一个text或rtf等NSString支持的文件类型, 你可以直接使用这个url来初始化一个NSString            NSString *string = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];            NSLog(@"------- ");            // 反正不管如何, 这种方式,得到的url它是能代表剪贴板里的文件的, 所以是可以直接使用的            NSLog(@"type:%@, pathString:%@\n",type,pathString);        }    } }

其他

  • 其实我也好奇,声音要怎么获取;
  • 上述方法,获取图片、pdf等资源是失败的。

参考资料

  • 想名真难:NSPasteboard 整理
    http://blog.csdn.net/u014600626/article/details/53635192

  • 九天雁翎:MacOS中的剪贴板操作 With Objective C
    http://blog.csdn.net/vagrxie/article/details/5344706