Wil*_*sen 7 c# com-interop uwp
我正试图从剪贴板中获取非标准格式的数据DataPackageView.GetDataAsync.我system.__ComObject很难将返回的转换为字符串.
这是代码:
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
if (dataPackageView.Contains("FileName"))
{
var data = await dataPackageView.GetDataAsync("FileName");
// How to convert data to string?
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种适用于任何非标准剪贴板格式的解决方案."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();
Run Code Online (Sandbox Code Playgroud)
在C++,剪贴板数据只是一个字节数组.必须有可能在C#中获得相同的字节数组,但我不知道解包/转换system.__ComObject
编辑:改述问题:
如何从系统中获取字符串或数组数组.__由DataPackageView.GetDataAsync(someFormat)返回的ComObject,其中someFormat是由另一个应用程序创建的任意剪贴板格式?
我很清楚如何获取数据.困难的部分是使用返回的数据.
接受的答案必须显示如何从返回的"数据"创建字符串或字节数组
var data = await dataPackageView.GetDataAsync(someFormat);
Run Code Online (Sandbox Code Playgroud)
本文介绍了如何实现自定义 dataPackage 对象。
http://www.minddriven.de/index.php/technology/dot-net/c-sharp/winrt-datapackage-custom-objects
关键是将 dataPackageView.GetAsync() 的返回值转换为 IRandomAccessStream
这是有效的:
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
if (dataPackageView.Contains("FileName"))
{
var data = await dataPackageView.GetDataAsync("FileName");
// convert data to string
var data = await dataPackageView.GetDataAsync("FileName");
var dataObj = data as IRandomAccessStream;
var stream = dataObj.GetInputStreamAt(0);
IBuffer buff = new Windows.Storage.Streams.Buffer((uint)dataObj.Size);
await stream.ReadAsync(buff, (uint)dataObj.Size, InputStreamOptions.None);
var filePath = Encoding.ASCII.GetString(buff.ToArray());
filePath = filePath.Replace("\0","");//get rid of null characters
}
Run Code Online (Sandbox Code Playgroud)
这应该适用于任何自定义数据格式,而不仅仅是“文件名”。如果不需要字符串,则可以仅使用 IRandomAccessStream 中可用的字节。
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |