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

  • 相关阅读:
    angularJS1遍历
    IDEA配置Tomcat
    IDEA配置JDK
    序列化
    servlet,filter,listener,intercepter区别
    textarea文本域值中含有大量 问题
    struts标签与jstl标签互换
    Struts/Hibernate/Spring源码下载
    捕获浏览器关闭、刷新事件,在窗体关闭时从全局对象里移除当前用户
    生成jsp验证码的代码详解(servlet版)
  • 原文地址:https://www.cnblogs.com/whisht/p/3112680.html
Copyright © 2011-2022 走看看