P/Invoke для SHMultiFileProperties shell32.dll

Я не очень хорошо разбираюсь в P/Invoke. Может ли кто-нибудь сказать мне, как объявить и использовать следующую функцию shell32.dll в .NET?

Из http://msdn.microsoft.com/en-us/library/bb762230%28VS.85%29.aspx:

HRESULT SHMultiFileProperties(      
    IDataObject *pdtobj,
    DWORD dwFlags
);

Он предназначен для отображения диалогового окна свойств оболочки Windows для нескольких объектов файловой системы.

Я уже понял, как использовать SHObjectProperties для одного файла или папки:

[DllImport("shell32.dll", SetLastError = true)]
static extern bool SHObjectProperties(uint hwnd, uint shopObjectType, [MarshalAs(UnmanagedType.LPWStr)] string pszObjectName, [MarshalAs(UnmanagedType.LPWStr)] string pszPropertyPage);

public static void ShowDialog(Form parent, FileSystemInfo selected)
{
    SHObjectProperties((uint)parent.Handle, (uint)ObjectType.File, selected.FullName, null));
}

enum ObjectType
{
    Printer = 0x01,
    File = 0x02,
    VoumeGuid = 0x04,
}

Кто-нибудь может помочь?


person David Boike    schedule 15.08.2009    source источник


Ответы (2)


Имеется интерфейс IDataObject и DataObject в .NET Framework.

[DllImport("shell32.dll", SetLastError = true)]
static extern int SHMultiFileProperties(IDataObject pdtobj, int flags);

public static void Foo()
{
    var pdtobj = new DataObject();

    pdtobj.SetFileDropList(new StringCollection { @"C:\Users", @"C:\Windows" });

    if (SHMultiFileProperties(pdtobj, 0) != 0 /*S_OK*/)
    {
        throw new Win32Exception();
    }
}

EDIT: я только что скомпилировал и протестировал это, и оно работает (появляется диалоговое окно с настройками внешнего вида папки).

person dtb    schedule 15.08.2009
comment
Это привело меня на правильный путь и является ответом на вопрос, поэтому + Ответ, +1 Однако это сложнее. Я искал свойства нескольких файлов (например, общий размер элементов), а не настройки внешнего вида папки. К счастью, я нашел JFileManager в Code Project, который содержит необходимый код: codeproject.com/KB/files/ JFileManager.aspx Найдите CopyFilesToClipboardForDragDrop(paths, pt) в классе JDropFiles. Это помогает в создании данных списка идентификаторов оболочки в IDataObject. Так что это работает в Vista, но по-прежнему не работает в Windows 2003. Мы все еще ищем идеальное решение. - person David Boike; 18.08.2009

Возможно, я неправильно прочитал ваш вопрос, но я думаю, что вы ищете расширенные свойства файла для файлов. то есть открытие проводника Windows и просмотр столбцов, таких как атрибуты, владелец, авторские права, размер, дата создания и т. д.?

В Shell32 есть API под названием GetDetailsOf, который предоставит эту информацию. Начальная статья о codeproject С уважением, Джон

person John'o    schedule 07.10.2009