zoukankan      html  css  js  c++  java
  • C# SHMultiFileProperties查看多个文件属性

    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SHMultiFileProperties(IDataObject pdtobj, int dwFlags);
    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr ILCreateFromPath(string path);
    [DllImport("shell32.dll", CharSet = CharSet.None)]
    public static extern void ILFree(IntPtr pidl);
    [DllImport("shell32.dll", CharSet = CharSet.None)]
    public static extern int ILGetSize(IntPtr pidl);
    
    private static MemoryStream CreateShellIDList(System.Collections.Specialized.StringCollection filenames)
    {
        // first convert all files into pidls list
        int pos = 0;
        byte[][] pidls = new byte[filenames.Count][];
        foreach (Object filename in filenames)
        {
            // Get pidl based on name
            IntPtr pidl = ILCreateFromPath(filename.ToString());
            int pidlSize = ILGetSize(pidl);
            // Copy over to our managed array
            pidls[pos] = new byte[pidlSize];
            Marshal.Copy(pidl, pidls[pos++], 0, pidlSize);
            ILFree(pidl);
        }
    
        // Determine where in CIDL we will start pumping PIDLs
        int pidlOffset = 4 * (filenames.Count + 2);
        // Start the CIDL stream
        MemoryStream memStream = new MemoryStream();
        BinaryWriter sw = new BinaryWriter(memStream);
        // Initialize CIDL witha count of files
        sw.Write(filenames.Count);
        // Calcualte and write relative offsets of every pidl starting with root
        sw.Write(pidlOffset);
        pidlOffset += 4; // root is 4 bytes
        foreach (byte[] pidl in pidls)
        {
            sw.Write(pidlOffset);
            pidlOffset += pidl.Length;
        }
    
        // Write the root pidl (0) followed by all pidls
        sw.Write(0);
        foreach (byte[] pidl in pidls) sw.Write(pidl);
        // stream now contains the CIDL
        return memStream;
    }
    
    //调用:
    string[] strArr = new string[] { @"C:\Lee", @"c:\windows" };
    System.Collections.Specialized.StringCollection coll = new System.Collections.Specialized.StringCollection();
    coll.AddRange(strArr);
    DataObject data = new DataObject();
    data.SetData("Preferred DropEffect", true, new MemoryStream(new byte[] { 5, 0, 0, 0 }));
    data.SetData("Shell IDList Array", true, CreateShellIDList(coll));
    data.SetFileDropList(coll);
    SHMultiFileProperties(data, 0);

  • 相关阅读:
    HDU 2100 LoveKey
    HDU 2111 Saving HDU
    HDU 2132 An easy problem
    PAT 甲级 1081 Rational Sum (数据不严谨 点名批评)
    LWIP内存管理
    LWIP带UCOS操作系统移植
    LWIP协议栈2-
    LWIP协议栈1
    掌握所有IO口的外部中断
    熟悉相关电路,控制I/O口,且配置相关参数,LED,光敏,74LS164数码管
  • 原文地址:https://www.cnblogs.com/whisht/p/3112680.html
Copyright © 2011-2022 走看看