c# – 如何从dataPackageView.GetDataAsync()获取字符串
我正在尝试使用DataPackageView.GetDataAsync从剪贴板中获取非标准格式的数据.我很难将返回的系统.__ ComObject转换为字符串.
这是代码: var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent(); if (dataPackageView.Contains("FileName")) { var data = await dataPackageView.GetDataAsync("FileName"); // How to convert data to string? } 我正在寻找一种适用于任何非标准剪贴板格式的解决方案. “FileName”是一种易于测试的格式,因为您可以通过在Windows资源管理器中复制文件将其放在剪贴板上. 在C / Win32中,我可以获得如下剪贴板数据: OpenClipboard(nullptr); UINT clipboarFormat = RegisterClipboardFormat(L"FileName"); HANDLE hData = GetClipboardData(clipboarFormat); char * pszText = static_cast<char*>(GlobalLock(hData)); GlobalUnlock(hData); CloseClipboard(); 在C中,剪贴板数据只是一个字节数组.必须可以在C#中获得相同的字节数组,但我不知道解包/转换系统.__ ComObject 编辑:改述问题: 如何从系统中获取字符串或数组.___由DataPackageView.GetDataAsync(someFormat)返回的ComObject,其中someFormat是由另一个应用程序创建的任意剪贴板格式? 我很清楚如何获取数据.困难的部分是使用返回的数据. 接受的答案必须显示如何从返回的“数据”创建字符串或字节数组 var data = await dataPackageView.GetDataAsync(someFormat); 解决方法
如果你知道它的文件,你可以使用以下代码
var content = Clipboard.GetContent(); IReadOnlyList<IStorageItem> files = await content.GetStorageItemsAsync(); var file = files.First() as StorageFile; 从MSDN article on StandardDataFormats起
例如 var content = Clipboard.GetContent(); var data = await content.GetDataAsync("PenData"); //Stream for HGLOBAL corresponding to CF_PENDATA (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |