我正试图从剪贴板中获取非标准格式的数据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) 我正在尝试编写一个函数来构建一个正则表达式,该函数可以测试字符串是否以字符串开头并包含另一个字符串.
function buildRegExp(startsWith,contains){
return new RegExp( ????? )
}
Run Code Online (Sandbox Code Playgroud)
例如:
buildRegExp('abc','fg').test('abcdefg')
Run Code Online (Sandbox Code Playgroud)
上面的表达式应该评估为true,因为字符串'abcdefg'以'abc'开头并包含'fg'.
'startsWith'和'contains'字符串可能相互重叠,因此正则表达式不能简单地搜索'startsWith'字符串,然后搜索'contains'字符串
以下内容也应该评估为真:
buildRegExp('abc','bcd').test('abcdefg')
Run Code Online (Sandbox Code Playgroud)
我不能使用简单的字符串函数.它需要是一个正则表达式,因为我将此正则表达式传递给MongoDB查询.