本文告诉大家如何使用剪贴板 Clipboard 读取剪贴板和放内容在剪贴板

在 win10 UWP 可以通过 Windows.ApplicationModel.DataTransfer.Clipboard 是剪贴板,剪贴板可以用来与其他程序的通信,目标程序可以使用 UWP 程序也可以使用以前的程序。

下面告诉大家如何去设置和获取剪贴板的内容。

剪贴板的存放使用的是DataPackage,里面提供一些默认的方法,因为DataPackage在放数据前需要指定数据的id,也就是一个字符串。实际DataPackage可以放任意类型。下面告诉大家如何设置文本。

设置文本

在UWP把字符串添加到剪贴板使用代码很少。

第一个创建 DataPackage,无论添加图片还是什么都是使用 DataPackage ,只有他可以放到剪贴板。

 DataPackage dataPackage = new DataPackage();

然后把文本设置 DataPackage ,因为剪贴板只能设置 DataPackage ,所以即使添加字符串,也是使用 DataPackage

            dataPackage.SetText("文本");Clipboard.SetContent(dp);

设置图片的方法也是相同。

但是 75351663 大神说,设置之前需要清空剪贴板,不然之前数据成为垃圾内存,我自己没有去试,但是加一句代码也没什么,建议设置之前清空。

如果需要设置任意类型,请使用SetData,这时设置类型可以是随意。但是可能设置不成功。

                var data = new DataPackage();data.SetData("字符串","内容");

获取文本

如果需要获取文本,一般在开始都判断是否包含文本。一般在需要拿到文本之前,使用Contains判断是否存在某个类型,而Contains的参数是字符串,可以使用StandardDataFormats来获得这些字符串。因为 UWP 的剪贴板是系统的,所以需要兼容以前的软件,以前的软件对剪贴板使用是传入字符串和内容,所以就需要使用字符串去拿。微软封装好了一些内容,这样在设置、获取内容就不需要自己指定字符串和通过内容到本地类型。

检查剪贴板包含文本

DataPackageView con = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
if (con.Contains(StandardDataFormats.Text))
            DataPackageView con = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();string str = string.Empty;if (con.Contains(StandardDataFormats.Text)){str = await con.GetTextAsync();}

获取图片

如果只是需要获得图片并且显示图片,可以使用下面的代码

        private async Task SetClipimage(DataPackageView data){RandomAccessStreamReference file = await data.GetBitmapAsync();BitmapImage image = new BitmapImage();await image.SetSourceAsync(await file.OpenReadAsync());Image.Source = image;}

但是需要把剪贴板的图片写入到本地,那么需要使用下面的代码

            if (con.Contains(StandardDataFormats.Bitmap)){RandomAccessStreamReference img = await con.GetBitmapAsync();var imgstream = await img.OpenReadAsync();BitmapImage bitmap = new BitmapImage();bitmap.SetSource(imgstream);Windows.UI.Xaml.Media.Imaging.WriteableBitmap src = new Windows.UI.Xaml.Media.Imaging.WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight);src.SetSource(imgstream);Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(imgstream);Windows.Graphics.Imaging.PixelDataProvider pxprd = await decoder.GetPixelDataAsync(Windows.Graphics.Imaging.BitmapPixelFormat.Bgra8, Windows.Graphics.Imaging.BitmapAlphaMode.Straight, new Windows.Graphics.Imaging.BitmapTransform(), Windows.Graphics.Imaging.ExifOrientationMode.RespectExifOrientation, Windows.Graphics.Imaging.ColorManagementMode.DoNotColorManage);byte[] buffer = pxprd.DetachPixelData();str = "image";StorageFolder folder = await _folder.GetFolderAsync(str);StorageFile file = await folder.CreateFileAsync(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + ".png", CreationCollisionOption.GenerateUniqueName);using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)){var encoder = await Windows.Graphics.Imaging.BitmapEncoder.CreateAsync(Windows.Graphics.Imaging.BitmapEncoder.PngEncoderId, fileStream);encoder.SetPixelData(Windows.Graphics.Imaging.BitmapPixelFormat.Bgra8, Windows.Graphics.Imaging.BitmapAlphaMode.Straight, decoder.PixelWidth, decoder.PixelHeight, decoder.DpiX, decoder.DpiY, buffer);await encoder.FlushAsync();}}

获取文件

 if (con.Contains(StandardDataFormats.StorageItems)){var filelist = await con.GetStorageItemsAsync();foreach (StorageFile t in filelist){}}

IStorageItem 转 StorageFile

                     if (t.IsOfType(StorageItemTypes.File)){StorageFile storageFile = storageItem as StorageFile;  }

在以前的软件,可以用过剪贴板获得任意内容,而uwp只能获得有限的内容,如果需要获得以前软件的特殊内容,那么请使用GetDataAsync,这个方法不建议用。

参考:

http://www.cnblogs.com/tcjiaan

http://www.cnblogs.com/chengxingliang/archive/2013/01/21/2857718.html

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

win10 UWP 剪贴板 Clipboard相关推荐

  1. UWP 剪贴板 Clipboard

    原文:UWP 剪贴板 Clipboard Clipboard使用Windows.ApplicationModel.DataTransfer.Clipboard 设置文本 DataPackage dat ...

  2. win10 UWP 序列化

    将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. <!--more-- ...

  3. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  4. win10 UWP 应用设置

    win10 UWP 应用设置 简单的把设置需要的,放到微软自带的LocalSettings LocalSettings.Values可以存放几乎所有数据 如果需要存放复合数据,一个设置项是由多个值组成 ...

  5. c++builder Delphi 直接使用剪贴板 Clipboard

    c++builder Delphi 直接使用剪贴板 Clipboard 剪贴板 delphi use  Vcl.Clipbrd procedure TForm27.FormCreate(Sender: ...

  6. Xamarin Essentials教程剪贴板Clipboard

    Xamarin Essentials教程剪贴板Clipboard 现在手机设备操作以触屏为主,不便于文本输入.虽然可以通过复制/粘贴的方式,借助系统剪贴板简化操作,但仍然不够方便.如果通过代码操作剪贴 ...

  7. win10 uwp DataContext

    本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...

  8. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  9. win10 uwp 毛玻璃

    原文:win10 uwp 毛玻璃 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博 ...

最新文章

  1. 2020 Java 面试高薪攻略.pdf
  2. Matlab将多项式的系数设为0
  3. 解码转码---System.web.HttpUtility 对象分析
  4. 反弹木马——本质上就是一个开80端口的CS程序,伪造自己在浏览网页
  5. python turtle画彩虹-Python turtle 绘制彩色螺旋线
  6. 【Paper】2019_Distributed Cooperative Control of a High-speed Train
  7. ROS中使用Eigen库[不定期更新]
  8. python django用户登录系统_Django实现用户注册登录
  9. 如何使用Pinterest新推出的功能Rich Pin
  10. 【NLP】Stanford
  11. [转]malloc的内存用free释放后为何系统回收不了
  12. 在主线程执行_深入理解JavaScript执行机制
  13. 禅道报表中关闭bug统计图_如何生成动态统计图,这款BI教你定义炫酷
  14. html 5 本地数据库(二)-- Web Sql Database核心方法openDatabase、transaction、executeSql 详解
  15. ios9提取安装包ipa_iOS获取ipa包以及图片资源
  16. 【金融案例分析03】深度解读:光大证券乌龙指事件是怎么回事?(套利交易、基金背后的金融原理,事件的过程与定性)
  17. Python项目分析:预测双色球福利彩票中奖号码
  18. 文件处理命令(二)目录处理命令
  19. 如何用 Python 让你的 PPT 数据动起来?
  20. 浅谈那些年,我的鬼迷心窍(来自一个可爱女孩的心声)!

热门文章

  1. linux下创建指定大小的空文件
  2. 作为建筑设计师,这8款渲染软件一定要知道
  3. 个人站长可以考虑的几种赚钱模式
  4. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码
  5. 神经网络可以解决一切问题吗:一场知乎辩论的整理
  6. 服务器金蝶上机日志在哪个文件夹,金蝶软件如何查看某用户的上机日志
  7. Linux系统ifconfig命令没有显示eth0,只有lo,且ip显示为127.0.0.1
  8. grpc-gateway 返回值中默认值为什么不显示?
  9. PlantSimulation 基本事件控制
  10. CCPC-Wannafly Winter Camp Day1部分题目解析