• C# 读取IE缓存文件(2)


       private void button1_Click(object sender, EventArgs e)
            {
                int nNeeded = 0, nBufSize;
                IntPtr buf;
                INTERNET_CACHE_ENTRY_INFO CacheItem;
                IntPtr hEnum;
                bool r;
    
                FindFirstUrlCacheEntry(null, IntPtr.Zero, ref nNeeded);
    
                if (Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)
                    return;
    
                nBufSize = nNeeded;
                buf = Marshal.AllocHGlobal(nBufSize);
                hEnum = FindFirstUrlCacheEntry(null, buf, ref nNeeded);
                var sb = new StringBuilder();
                while (true)
                {
                    CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure(buf,typeof (INTERNET_CACHE_ENTRY_INFO));
                        string url = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName);
                    if (url.Contains("mp.weixin.qq.com/misc/getheadimg"))
                    {
                        string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime);
                        string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime);
                        string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime);
                        string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime);
    
                        var LocalFileName = Marshal.PtrToStringAuto(CacheItem.lpszLocalFileName);
                        sb.AppendFormat("
    Url {0}", url);
                        sb.AppendFormat("
    本地路径{0}",LocalFileName);
                        if (!File.Exists(LocalFileName))
                        {
                        sb.AppendFormat("
    本地路径不存在!!!");
                        }
                        else
                        {
                        sb.AppendFormat("
    modifiedTime {0}", modifiedTime);
                        sb.AppendFormat("
     expireTime {0}", expireTime);
                        sb.AppendFormat("
     accessTime {0}",accessTime );
                        sb.AppendFormat("
     syncTime {0}", syncTime);
    
                            var id = Util.GetMatchValue(url, @"fakeid=(d+)");
                        var path = @"c:1" + id + ".jpg";
                        if (!File.Exists(path))
                        {
                            
                            File.Copy(LocalFileName, path);
                        }
                        }
                        //    pictureBox1.Image = GetThumbnail(LocalFileName);
                        //if (s.Contains(textBox1.Text))
                        //{
                        //}
                    }
                    nNeeded = nBufSize;
                    r = FindNextUrlCacheEntry(hEnum, buf, ref nNeeded);
    
                    if (!r && Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)
                        break;
    
                    if (!r && nNeeded > nBufSize)
                    {
                        nBufSize = nNeeded;
                        buf = Marshal.ReAllocHGlobal(buf, (IntPtr) nBufSize);
                        FindNextUrlCacheEntry(hEnum, buf, ref nNeeded);
                    }
                }
                Util.Log(sb);
                MessageBox.Show("系统数据加载完毕!");
                Marshal.FreeHGlobal(buf);
            }
    
            #region MyRegion
    
            #region 引入dll
    
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct INTERNET_CACHE_ENTRY_INFO
            {
                public int dwStructSize;
                public IntPtr lpszSourceUrlName;
                public IntPtr lpszLocalFileName;
                public int CacheEntryType;
                public int dwUseCount;
                public int dwHitRate;
                public int dwSizeLow;
                public int dwSizeHigh;
                public FILETIME LastModifiedTime;
                public FILETIME ExpireTime;
                public FILETIME LastAccessTime;
                public FILETIME LastSyncTime;
                public IntPtr lpHeaderInfo;
                public int dwHeaderInfoSize;
                public IntPtr lpszFileExtension;
                public int dwExemptDelta;
            }
    
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct SYSTEMTIME
            {
                public short wYear;
                public short wMonth;
                public short wDayOfWeek;
                public short wDay;
                public short wHour;
                public short wMinute;
                public short wSecond;
                public short wMilliseconds;
            }
    
            [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            public static extern int FileTimeToSystemTime(IntPtr lpFileTime,IntPtr lpSystemTime);
    
            [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
            public static extern IntPtr FindFirstUrlCacheEntry([MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,IntPtr lpFirstCacheEntryInfo,ref int lpdwFirstCacheEntryInfoBufferSize);
    
            [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
            public static extern bool FindNextUrlCacheEntry(IntPtr hEnumHandle,IntPtr lpNextCacheEntryInfo,ref int lpdwNextCacheEntryInfoBufferSize);
    
            [DllImport("wininet.dll")]
            public static extern bool FindCloseUrlCache(
            IntPtr hEnumHandle);
    
            const int ERROR_NO_MORE_ITEMS = 259;
    
            #endregion
    
            #region FileTimeToSystemTime
    
            private string FILETIMEtoDataTime(FILETIME time)
            {
                IntPtr filetime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(FILETIME)));
                IntPtr systime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SYSTEMTIME)));
                Marshal.StructureToPtr(time, filetime, true);
                FileTimeToSystemTime(filetime, systime);
                SYSTEMTIME st = (SYSTEMTIME)Marshal.PtrToStructure(systime, typeof(SYSTEMTIME));
                string Time = st.wYear+"-" + st.wMonth+"-" + st.wDay+" " + st.wHour+":" + st.wMinute+":" + st.wSecond;
                return Time;
            }
    
            #endregion 
            #endregion
  • 相关阅读:
    Linux之文档与目录结构
    Linux介绍
    CentOS7下zip解压和unzip压缩文件
    yum 命令讲解
    Linux安装redis
    pip更新问题
    第一章-KS8初体验 安装部署
    MVC Razor视图引擎
    MVC 组件之间的关系
    Web应用程序和网站的区别
  • 原文地址:https://www.cnblogs.com/simadi/p/4164514.html
Copyright © 2020-2023  润新知