mirror of https://github.com/dahall/Vanara.git
Apply the solution, add the new test or that and simplified the test (#390)
parent
f4e78524ee
commit
caae0d547a
|
@ -753,7 +753,7 @@ namespace Vanara.PInvoke
|
|||
return charSet;
|
||||
}
|
||||
|
||||
private static Encoding GetEncoding(ClipCorrespondingTypeAttribute attr) => (Encoding)Activator.CreateInstance(attr.EncodingType ?? typeof(UnicodeEncoding));
|
||||
private static Encoding GetEncoding(ClipCorrespondingTypeAttribute attr) => (Encoding)Activator.CreateInstance(attr?.EncodingType ?? typeof(UnicodeEncoding));
|
||||
|
||||
/// <summary>
|
||||
/// <para>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using NUnit.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
@ -27,7 +26,7 @@ namespace Vanara.Windows.Shell.Tests
|
|||
private const string url = "https://microsoft.com";
|
||||
|
||||
[Test]
|
||||
public void zhuxbTest()
|
||||
public void FileRelatedStructsInClipboardTest()
|
||||
{
|
||||
Thread STA = new(() =>
|
||||
{
|
||||
|
@ -35,30 +34,30 @@ namespace Vanara.Windows.Shell.Tests
|
|||
|
||||
try
|
||||
{
|
||||
NativeClipboard.Clear();
|
||||
Clipboard.Clear();
|
||||
|
||||
ShellItemArray ShellItemList = new(files.Select(fn => new ShellItem(fn)));
|
||||
|
||||
var Data = NativeClipboard.CreateEmptyDataObject();
|
||||
var Data = Clipboard.CreateEmptyDataObject();
|
||||
|
||||
Data.SetData(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORW, new Shell32.FILEGROUPDESCRIPTOR
|
||||
Data.SetData(ShellClipboardFormat.CFSTR_FILEDESCRIPTORW, new FILEGROUPDESCRIPTOR
|
||||
{
|
||||
cItems = (uint)ShellItemList.Count,
|
||||
fgd = ShellItemList.Select((Item) =>
|
||||
{
|
||||
ShellFileInfo FileInfo = Item.FileInfo;
|
||||
Shell32.FD_FLAGS Flags = Shell32.FD_FLAGS.FD_ATTRIBUTES
|
||||
| Shell32.FD_FLAGS.FD_CREATETIME
|
||||
| Shell32.FD_FLAGS.FD_ACCESSTIME
|
||||
| Shell32.FD_FLAGS.FD_WRITESTIME
|
||||
| Shell32.FD_FLAGS.FD_UNICODE;
|
||||
FD_FLAGS Flags = FD_FLAGS.FD_ATTRIBUTES
|
||||
| FD_FLAGS.FD_CREATETIME
|
||||
| FD_FLAGS.FD_ACCESSTIME
|
||||
| FD_FLAGS.FD_WRITESTIME
|
||||
| FD_FLAGS.FD_UNICODE;
|
||||
|
||||
if (!Item.IsFolder)
|
||||
{
|
||||
Flags |= Shell32.FD_FLAGS.FD_FILESIZE;
|
||||
Flags |= FD_FLAGS.FD_FILESIZE;
|
||||
}
|
||||
|
||||
return new Shell32.FILEDESCRIPTOR
|
||||
return new FILEDESCRIPTOR
|
||||
{
|
||||
cFileName = Item.Name,
|
||||
dwFlags = Flags,
|
||||
|
@ -77,26 +76,26 @@ namespace Vanara.Windows.Shell.Tests
|
|||
|
||||
if (!Item.IsFolder)
|
||||
{
|
||||
Data.SetData(Shell32.ShellClipboardFormat.CFSTR_FILECONTENTS, Item.GetHandler<IStream>(Shell32.ShellUtil.CreateBindCtx(STGM.STGM_READWRITE | STGM.STGM_SHARE_DENY_WRITE)), DVASPECT.DVASPECT_CONTENT, Index);
|
||||
Data.SetData(ShellClipboardFormat.CFSTR_FILECONTENTS, Item.GetHandler<IStream>(ShellUtil.CreateBindCtx(STGM.STGM_READWRITE | STGM.STGM_SHARE_DENY_WRITE)), DVASPECT.DVASPECT_CONTENT, Index);
|
||||
}
|
||||
}
|
||||
|
||||
NativeClipboard.SetDataObject(Data);
|
||||
Clipboard.SetDataObject(Data);
|
||||
|
||||
foreach (uint FormatId in NativeClipboard.CurrentlySupportedFormats)
|
||||
foreach (uint FormatId in Clipboard.CurrentlySupportedFormats)
|
||||
{
|
||||
Debug.WriteLine($"Available format: {NativeClipboard.GetFormatName(FormatId)}");
|
||||
Debug.WriteLine($"Available format: {Clipboard.GetFormatName(FormatId)}");
|
||||
}
|
||||
|
||||
if ((NativeClipboard.IsFormatAvailable(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORA) || NativeClipboard.IsFormatAvailable(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORW)) && NativeClipboard.IsFormatAvailable(Shell32.ShellClipboardFormat.CFSTR_FILECONTENTS))
|
||||
if ((Clipboard.IsFormatAvailable(ShellClipboardFormat.CFSTR_FILEDESCRIPTORA) || Clipboard.IsFormatAvailable(ShellClipboardFormat.CFSTR_FILEDESCRIPTORW)) && Clipboard.IsFormatAvailable(ShellClipboardFormat.CFSTR_FILECONTENTS))
|
||||
{
|
||||
Shell32.FILEGROUPDESCRIPTOR FileGroupDescriptor = NativeClipboard.IsFormatAvailable(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORA)
|
||||
? NativeClipboard.CurrentDataObject.GetData<Shell32.FILEGROUPDESCRIPTOR>(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORA)
|
||||
: NativeClipboard.CurrentDataObject.GetData<Shell32.FILEGROUPDESCRIPTOR>(Shell32.ShellClipboardFormat.CFSTR_FILEDESCRIPTORW);
|
||||
FILEGROUPDESCRIPTOR FileGroupDescriptor = Clipboard.IsFormatAvailable(ShellClipboardFormat.CFSTR_FILEDESCRIPTORA)
|
||||
? Clipboard.CurrentDataObject.GetData<FILEGROUPDESCRIPTOR>(ShellClipboardFormat.CFSTR_FILEDESCRIPTORA)
|
||||
: Clipboard.CurrentDataObject.GetData<FILEGROUPDESCRIPTOR>(ShellClipboardFormat.CFSTR_FILEDESCRIPTORW);
|
||||
|
||||
for (int Index = 0; Index < FileGroupDescriptor.cItems; Index++)
|
||||
{
|
||||
Shell32.FILEDESCRIPTOR FileDescriptor = FileGroupDescriptor.fgd[Index];
|
||||
FILEDESCRIPTOR FileDescriptor = FileGroupDescriptor.fgd[Index];
|
||||
|
||||
ulong Size = 0;
|
||||
FileAttributes Attributes = default;
|
||||
|
@ -104,33 +103,33 @@ namespace Vanara.Windows.Shell.Tests
|
|||
DateTimeOffset LastAccessTime = default;
|
||||
DateTimeOffset LastWriteTime = default;
|
||||
|
||||
if (FileDescriptor.dwFlags.HasFlag(Shell32.FD_FLAGS.FD_ATTRIBUTES))
|
||||
if (FileDescriptor.dwFlags.HasFlag(FD_FLAGS.FD_ATTRIBUTES))
|
||||
{
|
||||
Attributes = (FileAttributes)FileDescriptor.dwFileAttributes;
|
||||
}
|
||||
|
||||
if (FileDescriptor.dwFlags.HasFlag(Shell32.FD_FLAGS.FD_FILESIZE))
|
||||
if (FileDescriptor.dwFlags.HasFlag(FD_FLAGS.FD_FILESIZE))
|
||||
{
|
||||
Size = FileDescriptor.nFileSize;
|
||||
}
|
||||
|
||||
if (FileDescriptor.dwFlags.HasFlag(Shell32.FD_FLAGS.FD_CREATETIME))
|
||||
if (FileDescriptor.dwFlags.HasFlag(FD_FLAGS.FD_CREATETIME))
|
||||
{
|
||||
CreateTime = FileDescriptor.ftCreationTime.ToDateTime();
|
||||
}
|
||||
|
||||
if (FileDescriptor.dwFlags.HasFlag(Shell32.FD_FLAGS.FD_ACCESSTIME))
|
||||
if (FileDescriptor.dwFlags.HasFlag(FD_FLAGS.FD_ACCESSTIME))
|
||||
{
|
||||
LastAccessTime = FileDescriptor.ftLastAccessTime.ToDateTime();
|
||||
}
|
||||
|
||||
if (FileDescriptor.dwFlags.HasFlag(Shell32.FD_FLAGS.FD_WRITESTIME))
|
||||
if (FileDescriptor.dwFlags.HasFlag(FD_FLAGS.FD_WRITESTIME))
|
||||
{
|
||||
LastWriteTime = FileDescriptor.ftLastWriteTime.ToDateTime();
|
||||
}
|
||||
|
||||
//Throw Invalid FORMATETC structure
|
||||
var result = NativeClipboard.CurrentDataObject.GetData(Shell32.ShellClipboardFormat.CFSTR_FILECONTENTS, index: Index);
|
||||
var result = Clipboard.CurrentDataObject.GetData(ShellClipboardFormat.CFSTR_FILECONTENTS, index: Index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -408,5 +407,18 @@ namespace Vanara.Windows.Shell.Tests
|
|||
|
||||
void OnUpdate(object sender, EventArgs e) => sawChange.Set();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetCustomFormatWithStringDataText()
|
||||
{
|
||||
const string Format = "TestFormat";
|
||||
const string Data = "Test Data";
|
||||
|
||||
var ido = Clipboard.CreateEmptyDataObject();
|
||||
ido.SetData(Format, Data);
|
||||
Clipboard.SetDataObject(ido);
|
||||
|
||||
Assert.AreEqual(Data, Clipboard.CurrentDataObject.GetData<string>(Format));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue