P/Invoke для SHMultiFileProperties оболочки 32.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,
}
Кто-нибудь может помочь?
Решение
Есть Идатаобъект интерфейс и Объект данных класс в .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();
}
}
РЕДАКТИРОВАТЬ: Я только что скомпилировал и протестировал это, и оно работает (всплывает диалоговое окно с настройками внешнего вида папки).
Другие советы
Возможно, я неправильно прочитал ваш вопрос, но я думаю, что вы ищете расширенные свойства файлов.то естьоткрыть проводник Windows и просмотреть столбцы, такие как атрибуты, владелец, авторские права, размер, дата создания и т. д.?
В Shell32 есть API под названием GetDetailsOf, который предоставит эту информацию.Стартовая статья о кодпроект Ура, Джон