P / Invoke per SHMultiFileProperties di Shell32.dll
Domanda
Non sono molto bravo con P / Invoke. Qualcuno può dirmi come dichiarare e utilizzare la seguente funzione shell32.dll in .NET?
http://msdn.microsoft. com / it-it / library / bb762230% 28VS.85% 29.aspx :
HRESULT SHMultiFileProperties(
IDataObject *pdtobj,
DWORD dwFlags
);
E 'per visualizzare la finestra di shell di Windows proprietà di più oggetti del file system.
I già capito come utilizzare SHObjectProperties per un file o una cartella:
[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,
}
Chiunque può aiutare?
Soluzione
C'è un href="http://msdn.microsoft.com/en-us/library/system.windows.forms.idataobject.aspx" rel="nofollow noreferrer"> IDataObject interfaccia DataObject classe in .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:. Ho appena compilato e testato questo e funziona (si apre un po 'di dialogo con le impostazioni della cartella di aspetto)
Altri suggerimenti
I magari leggendo si mette in discussione in modo non corretto, ma penso che si sta cercando le proprietà dei file estesi per i file. vale a dire l'apertura di Windows Explorer e la visualizzazione di colonne come attributi, proprietario, copyright, dimensione, data di creazione, ecc?
C'è un'API in Shell32 chiamato GetDetailsOf che fornirà queste informazioni. Un articolo a partire dal CodeProject Saluti, John