Я попробовал изменить код следующим образом:
создать новый файл FileMultiPicker.cs:
Код: Выделить всё
using Pickers.Classes;
using Pickers.Enums;
namespace Pickers;
public class FileMultiPicker
{
private readonly IntPtr _windowHandle;
public FileMultiPicker(IntPtr windowHandle)
{
_windowHandle = windowHandle;
}
public List Show(List? typeFilters = null)
{
return Helper.ShowMulti(_windowHandle, FOS.FOS_ALLOWMULTISELECT | FOS.FOS_FORCEFILESYSTEM, typeFilters);
}
}
Код: Выделить всё
internal static List ShowMulti(nint windowHandle, FOS fos, List? typeFilters = null)
{
var dialog = new FileOpenDialog();
try
{
dialog.SetOptions(fos);
if (typeFilters != null)
{
typeFilters.Insert(0, string.Join("; ", typeFilters));
var filterSpecs = typeFilters.Select(f => new COMDLG_FILTERSPEC(f)).ToArray();
dialog.SetFileTypes((uint)filterSpecs.Length, filterSpecs);
}
if (dialog.Show(windowHandle) != 0) return new();
// the above is copy from source, the below is my own take on the matter
dialog.GetResults(out IShellItemArray results);
List files = new();
results.GetCount(out var count);
for (uint i = 0; i < count; i++)
{
results.GetItemAt(i, out var result);
result.GetDisplayName(SIGDN.SIGDN_FILESYSPATH, out var path);
files.Add(path);
}
return files;
}
catch (Exception ex)
{
return new();
}
finally
{
#pragma warning disable CA1416
Marshal.ReleaseComObject(dialog);
#pragma warning restore CA1416
}
}
Я почти ничего не знаю о том, как они на самом деле работают, поэтому, если кто-то может проверить источник и помочь мне заставить это работать или указать мне какое-то направление, я был бы признателен это
Подробнее здесь: https://stackoverflow.com/questions/781 ... -privilege