程序员

mac osx 剪贴板操作

2019-04-08  本文已影响0人  _smoking_

基本操作

获取剪贴板

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];

清除剪贴板

[pasteboard clearContents];

枚举剪贴板中的数据类型

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSArray *urls = [[[NSPasteboard generalPasteboard] readObjectsForClasses:@[[NSURL class]] options:@{NSPasteboardURLReadingFileURLsOnlyKey: @(YES)}] valueForKey:@"path"];
if (urls.count > 0) {
    NSString *_nsStr = @"dropfile";
}
else  if ([pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypeRTF]] ||
          [pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypeRTFD]]){
    NSString *_nsStr = @"rtf";
}
else if ([pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypePNG]]||
         [pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypeTIFF]]) {
    NSString *_nsStr = @"image";
}
else if ([pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypeHTML]]) {
    NSString *_nsStr = @"html";
}
else if ([pasteboard canReadItemWithDataConformingToTypes:@[NSPasteboardTypeString]]){
    NSString *_nsStr = @"text";
}
else {
    NSString *_nsStr = @"orther";
}

从剪贴板中获取拷贝的文件地址

NSArray *urls = [[[NSPasteboard generalPasteboard] readObjectsForClasses:@[[NSURL class]] options:@{NSPasteboardURLReadingFileURLsOnlyKey: @(YES)}] valueForKey:@"path"];
for (NSInteger i= 0; i<urls.count; i++) {
    std::string _strTemp = [urls[i] UTF8String];
    NSLog(@"filepath:%s",_strTemp.c_str());
}

往剪贴板中写入数据

bool Clipboard::SetClipboardData(std::string _strFormatName, const char* _pBuffer, size_t _len)
{
    if(pasteboard == nil)
    {
        OpenClipboard();
    }
    NSData * _nsData = [NSData dataWithBytes:_pBuffer length:_len];
    if (_strFormatName == "text") {
        [pasteboard setData:_nsData forType:NSPasteboardTypeString];
    }
    else if(_strFormatName == "image") {
        [pasteboard setData:_nsData forType:NSPasteboardTypePNG];
    }
    else if(_strFormatName == "html") {
        [pasteboard setData:_nsData forType:NSPasteboardTypeHTML];
    }
    else if(_strFormatName == "rtf") {
        [pasteboard setData:_nsData forType:NSPasteboardTypeRTF];
    }
    else{
        NSString * _nsFormatName = [NSString stringWithCString:_strFormatName.c_str() encoding:NSUTF8StringEncoding];
        [pasteboard setData:_nsData forType:_nsFormatName];
        
    }
    return true;
}

往剪贴板中写入需要拷贝的文件地址

bool Clipboard::SetDropFileData(std::vector<std::string> _vctFile, bool _bCopyOrCut)
{
    pasteboard = [NSPasteboard pasteboardWithName:NSGeneralPboard];
    [pasteboard clearContents];
    NSMutableArray * _urlArry = [NSMutableArray array];
    for (auto it:_vctFile) {
        NSString *_nsstrTemp = [NSString stringWithUTF8String:it.c_str()];
        NSURL* _url = [NSURL fileURLWithPath:_nsstrTemp isDirectory:NO];
        [_urlArry addObject:_url];
    }
    [pasteboard writeObjects:_urlArry];
    return true;
}
友情链接
上一篇下一篇

猜你喜欢

热点阅读