P / Invoke para SHMultiFileProperties de Shell32.dll
Pregunta
No soy muy buena con P / Invoke. ¿Puede alguien decirme cómo declarar y utilizar la siguiente función shell32.dll en .NET?
http://msdn.microsoft. com / es-es / library / bb762230% 28VS.85% 29.aspx :
HRESULT SHMultiFileProperties(
IDataObject *pdtobj,
DWORD dwFlags
);
Es para mostrar el cuadro de diálogo Propiedades de Windows Shell para varios objetos del sistema de archivos.
Ya cuenta de cómo utilizar SHObjectProperties para un archivo o una carpeta:
[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,
}
¿Alguien puede ayudar?
Solución
Hay un href="http://msdn.microsoft.com/en-us/library/system.windows.forms.idataobject.aspx" rel="nofollow noreferrer"> IDataObject interfaz y DataObject clase
EDIT:. Yo sólo he compilado y probado esto y funciona (POPS un poco de diálogo con los parámetros de aspecto carpeta) [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();
}
}
Otros consejos
Yo tal vez la lectura se pregunta incorrectamente, pero creo que busca las propiedades del archivo para los archivos extendidos. es decir, abrir el Explorador de Windows y la visualización de las columnas como atributos, propietario, derechos de autor, tamaño, fecha de creación, etc.?
Hay una API en Shell32 llama GetDetailsOf que proporcionará esta información. Un artículo a partir de la CodeProject Salud, John