0

我对 P/Invoke 不太擅长。谁能告诉我如何在 .NET 中声明和使用以下 shell32.dll 函数?

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

HRESULT SHMultiFileProperties(      
    IDataObject *pdtobj,
    DWORD dwFlags
);

它用于显示多个文件系统对象的 Windows Shell 属性对话框。

我已经想出了如何将 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

2 回答 2

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();
    }
}

编辑:我刚刚编译并测试了它并且它可以工作(弹出一些带有文件夹外观设置的对话框)。

于 2009-08-15T08:53:45.020 回答
0

我可能错误地阅读了您的问题,但我认为您正在寻找文件的扩展文件属性。即打开 Windows 资源管理器并查看属性、所有者、版权、大小、创建日期等列?

Shell32 中有一个名为 GetDetailsOf 的 API,可提供此信息。关于codeproject Cheers 的一篇开始文章,John

于 2009-10-07T13:53:18.643 回答