2018-9-30-win10-UWP-剪贴板-Clipboard
原文:2018-9-30-win10-UWP-剪贴板-Clipboard
title | author | date | CreateTime | categories |
---|---|---|---|---|
win10 UWP 剪贴板 Clipboard
|
lindexi
|
2018-09-30 18:54:23 +0800
|
2018-2-13 17:23:3 +0800
|
Win10 UWP
|
本文告诉大家如何使用剪贴板 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
2018-9-30-win10-UWP-剪贴板-Clipboard的更多相关文章
- win10 UWP 剪贴板 Clipboard
win10 UWP 剪贴板 Clipboard使用Windows.ApplicationModel.DataTransfer.Clipboard 设置文本 DataPackage dataPackag ...
- UWP 剪贴板 Clipboard
Clipboard使用Windows.ApplicationModel.DataTransfer.Clipboard 设置文本 DataPackage dataPackage = new DataPa ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
- 【Win10 UWP】后台任务与动态磁贴
动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 UWP 序列化
将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. .NET Framewor ...
- 【广告】win10 uwp 水印图床 含代码
本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...
- win10 uwp 入门
UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...
- win10 uwp 商业游戏
本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...
- win10 UWP 动画
原文:win10 UWP 动画 本文告诉大家如何写同一个简单的动画. 动画入门 本文开始写一个简单的动画,只是移动矩形作为本文的例子. 在 UWP 移动元素的动画,可以使用 RenderTransfo ...
随机推荐
- length()返回当前字符串的字符个数
package seday01;/** * int length() * 返回当前字符串的字符个数 * @author xingsir * */public class LengthDemo { pu ...
- Java生鲜电商平台-IntelliJ IDEA 最新注册码,亲测可用
2019年IntelliJ IDEA 最新注册码(截止到2020年3月11日) 操作步骤: 第一步: 修改 hosts 文件 ~~~ 在hosts文件中,添加以下映射关系: 0.0.0.0 acco ...
- github pages与travis ci运作原理
当说到自动部署的时候,我很反感那些一上来就balabala说怎么操作的博文文章,照着别人的做法有样学样,经常会因为与自己项目实际情况不符而出现各种问题. 比如说github和travis,首先应该搞明 ...
- 微信小程序动画之弹出菜单
用微信小程序做了一个动画,效果如上图: 代码: js: Page({ data: { isPopping: false, animPlus: {}, animCollect: {}, animTran ...
- windows10 性能优化
公司的电脑 CPU 是 i5, 内存: 8GB, 机械硬盘, 装的是 win10 操作系统, 作为开发机, 配置本来够低了, 公司又预装了很多个监控软件, 性能就更差了. 这些天明显感觉这个机器越来越 ...
- linux权限管理-基本权限
目录 linux权限管理-基本权限 权限修改命令chmod linux权限管理-基本权限 权限 针对某些文件和进程,对用户进行限制 权限与用户的关系 rwx rwx r-x User Group Ot ...
- OceanBase 架构初探
OceanBase 架构初探 原创衣舞晨风 发布于2018-11-13 08:44:14 阅读数 1417 收藏 展开 1.设计思路 OceanBase的目标是支持数百TB的数据量以及数十万TPS. ...
- 海思屏幕HAL代码解析
显示屏幕(LCD)模块提供屏幕相关功能接口,调用者为上层应用模块(含 init.状态机.ui),上下文依赖关系,如图 3-7 所示. 系统框架为 linux+Huawei LiteOS 双系统架构,媒 ...
- (办公)vue下载excel,后台用post方法
后台方法的参数必须是@RequestBody修饰的. 前台关键代码: axios ( { method : 'post', url : api.exportPlayTime , // 请求地址 dat ...
- JSP知识总结
day11 JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1. ...