2009-08-15 1 views
0

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

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

HRESULT SHMultiFileProperties(  
    IDataObject *pdtobj, 
    DWORD dwFlags 
); 

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

Я уже понял, как использовать 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, 
} 

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

ответ

4

В .NET Framework есть интерфейс IDataObject и класс DataObject.

[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: Я только что собрали и проверили это, и она работает (появляется какой-то диалог с настройками внешнего вида папки).

+0

Это заставило меня на правильном пути, и является ответом на вопрос, так + Ответить, +1 Однако, это гораздо сложнее. Я искал свойства нескольких файлов (например, общий размер элементов), а не настройки внешнего вида папки. К счастью, я нашел JFileManager на код проекта, который содержит необходимый код: http://www.codeproject.com/KB/files/JFileManager.aspx Посмотрите на CopyFilesToClipboardForDragDrop (трактов, Pt) в классе JDropFiles. Это помогает создать данные списка идентификаторов оболочки в IDataObject. Так что это работает в Vista, но все равно не работает в Windows 2003. Все еще ищет идеальное решение. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^