问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C# webBrowser控件 清除当前游览页面缓存 请问怎样实现呢?

发布网友 发布时间:2022-05-30 20:42

我来回答

1个回答

热心网友 时间:2023-11-15 15:58

错了。。。刚才找的是Basic的,纠正,这是C#的

——————————————C# API实现——————————————

using System;
using System.Runtime.InteropServices;

// Visual C# version of Q326201
namespace Q326201CS
{
    // Class for deleting the cache.
    class DeleteCache
    {
        // For PInvoke: Contains information about an entry in the Internet cache
        [StructLayout(LayoutKind.Explicit, Size=80)]
        public struct INTERNET_CACHE_ENTRY_INFOA
        {
            [FieldOffset(0)]  public uint dwStructSize;
            [FieldOffset(4)]  public IntPtr lpszSourceUrlName;
            [FieldOffset(8)]  public IntPtr lpszLocalFileName;
            [FieldOffset(12)] public uint CacheEntryType;
            [FieldOffset(16)] public uint dwUseCount;
            [FieldOffset(20)] public uint dwHitRate;
            [FieldOffset(24)] public uint dwSizeLow;
            [FieldOffset(28)] public uint dwSizeHigh;
            [FieldOffset(32)] public FILETIME LastModifiedTime;
            [FieldOffset(40)] public FILETIME ExpireTime;
            [FieldOffset(48)] public FILETIME LastAccessTime;
            [FieldOffset(56)] public FILETIME LastSyncTime;
            [FieldOffset(64)] public IntPtr lpHeaderInfo;
            [FieldOffset(68)] public uint dwHeaderInfoSize;
            [FieldOffset(72)] public IntPtr lpszFileExtension;
            [FieldOffset(76)] public uint dwReserved;
            [FieldOffset(76)] public uint dwExemptDelta;
        }

        // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache
        [DllImport(@"wininet",
            SetLastError=true,
            CharSet=CharSet.Auto,
            EntryPoint="FindFirstUrlCacheGroup",
            CallingConvention=CallingConvention.StdCall)]
        public static extern IntPtr FindFirstUrlCacheGroup(
            int dwFlags,
            int dwFilter,
            IntPtr lpSearchCondition,
            int dwSearchCondition,
            ref long lpGroupId,
            IntPtr lpReserved);

        // For PInvoke: Retrieves the next cache group in a cache group enumeration
        [DllImport(@"wininet",
            SetLastError=true,
            CharSet=CharSet.Auto,
            EntryPoint="FindNextUrlCacheGroup",
            CallingConvention=CallingConvention.StdCall)]
        public static extern bool FindNextUrlCacheGroup(
            IntPtr hFind,
            ref long lpGroupId,
            IntPtr lpReserved);

        // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file
        [DllImport(@"wininet", 
            SetLastError=true, 
            CharSet=CharSet.Auto, 
            EntryPoint="DeleteUrlCacheGroup", 
            CallingConvention=CallingConvention.StdCall)]
        public static extern bool DeleteUrlCacheGroup(
            long GroupId,
            int dwFlags,
            IntPtr lpReserved);

        // For PInvoke: Begins the enumeration of the Internet cache
        [DllImport(@"wininet",
            SetLastError=true,
            CharSet=CharSet.Auto,
            EntryPoint="FindFirstUrlCacheEntryA",
            CallingConvention=CallingConvention.StdCall)]
        public static extern IntPtr FindFirstUrlCacheEntry(
            [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,
            IntPtr lpFirstCacheEntryInfo,
            ref int lpdwFirstCacheEntryInfoBufferSize);

        // For PInvoke: Retrieves the next entry in the Internet cache
        [DllImport(@"wininet",
            SetLastError=true,
            CharSet=CharSet.Auto,
            EntryPoint="FindNextUrlCacheEntryA",
            CallingConvention=CallingConvention.StdCall)]
        public static extern bool FindNextUrlCacheEntry(
            IntPtr hFind,
            IntPtr lpNextCacheEntryInfo,
            ref int lpdwNextCacheEntryInfoBufferSize);

        // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists
        [DllImport(@"wininet",
            SetLastError=true,
            CharSet=CharSet.Auto,
            EntryPoint="DeleteUrlCacheEntryA",
            CallingConvention=CallingConvention.StdCall)]
        public static extern bool DeleteUrlCacheEntry(
            IntPtr lpszUrlName);

        [STAThread]
        static void Main(string[] args)
        {
            // Indicates that all of the cache groups in the user's system should be enumerated
            const int CACHEGROUP_SEARCH_ALL = 0x0;
            // Indicates that all the cache entries that are associated with the cache group
            // should be deleted, unless the entry belongs to another cache group.
            const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2;
            // File not found.
            const int ERROR_FILE_NOT_FOUND = 0x2;
            // No more items have been found.
            const int ERROR_NO_MORE_ITEMS = 259;
            // Pointer to a GROUPID variable
            long groupId = 0;

            // Local variables
            int cacheEntryInfoBufferSizeInitial = 0;
            int cacheEntryInfoBufferSize = 0;
            IntPtr cacheEntryInfoBuffer = IntPtr.Zero;
            INTERNET_CACHE_ENTRY_INFOA internetCacheEntry;
            IntPtr enumHandle = IntPtr.Zero;
            bool returnValue = false;

            // Delete the groups first.
            // Groups may not always exist on the system.
            // For more information, visit the following Microsoft Web site:
            // http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp
            // By default, a URL does not belong to any group. Therefore, that cache may become
            // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group.
            enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero);
            // If there are no items in the Cache, you are finished.
            if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                return;

            // Loop through Cache Group, and then delete entries.
            while(true)
            {
                // Delete a particular Cache Group.
                returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero);
                if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())
                {
                    returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero);
                }

                if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()))
                    break;
            }

            // Start to delete URLs that do not belong to any group.
            enumHandle = FindFirstUrlCacheEntry(null, IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial);
            if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                return;

            cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
            cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);
            enumHandle = FindFirstUrlCacheEntry(null, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);

            while(true)
            {
                internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(INTERNET_CACHE_ENTRY_INFOA));

                cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize;
                returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName);
                if (!returnValue)
                {
                    returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
                }
                if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                {
                    break;
                }
                if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize)
                {
                    cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
                    cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr) cacheEntryInfoBufferSize);
                    returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
                }
            }
            Marshal.FreeHGlobal(cacheEntryInfoBuffer);
        }
    }
}

第二种方法

——————————————调用RunDll32.exe——————————————

RunCmd("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8");

void RunCmd(string cmd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
// 关闭Shell的使用
p.StartInfo.UseShellExecute = false;
// 重定向标准输入
p.StartInfo.RedirectStandardInput = true;
// 重定向标准输出
p.StartInfo.RedirectStandardOutput = true;
//重定向错误输出
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(cmd);
p.StandardInput.WriteLine("exit");
}

——————————————其他一些参数的说明——————————————

//Temporary Internet Files  (Internet临时文件)
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
//Cookies
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
//History (历史记录)
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
//Form Data (表单数据)
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
//Passwords (密码)
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
//Delete All  (全部删除)
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
//Delete All - "Also delete files and settings stored by add-ons"
//RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...△=口+口+口,问△、o、口谁大谁小,小学一年级数学期末附加题_百度知 ... 一年级数学△ +△ +〇 +〇 +〇=27,△ +△+ 〇 +〇+ △ +△=22问△=... 上海南浦大桥长途客运中心到虹桥机场第二航站楼怎么走? 上海浦东国际机场2号航站到上海长途汽车客运总站,最快怎么走,用时多少... 从上海长途汽车客运总站到虹桥机场2号航站楼 木头爱上烈火简介 省直遴选面向哪些群体? 义务教育阶段的学生有什么权利和义务? ngclz型带制动轮鼓形齿式联轴器内容简介 GⅡCL型基本型(窄型)鼓形齿式联轴器基本参数 半生沉醉半生醒打10笔字是什么? c#支持findfirsturlcacheentry吗 是一首古风歌词,一生扬名又立万,还有一生戎马 装系统的问题 江湖怨、情仇有谁能言这是哪首歌词 落花残缺已不复人生过半天过午半生迷途半生醉一目醒来烟云散.什么意思 near hit是什么意思 朋友给我QQ发了段录音,我想把这段录音下载下来当手机铃声,怎么下载啊 谢谢了。 半生浮梦半生醉什么意思 闯江湖半生醉 洒热血不掉泪 寻知心共举杯 生尽欢死当睡 晚风晓、迷人醉、醉落红尘苍生泪月夜弯、催人泪、泪撒千年半生醉、什么意思 追风天涯天涯客,半生漂泊半生醉。半梦半醒伴君睡,半夜冻醒怒抱被。猜谜语打一动物,求大神给答案 半世买醉 半生醉什么意思 一生邂逅半生醉是什么意思?请亲们解释下? 且将这风尘做酒一饮消愁出自哪里 半世浮华半生醉诗句对出下句~~~ 又把老醋当美酒,半生醉来,半生醒什么意思? 一盏相思半生醉的下一句 林徽因与梁思成的内容简介 梁思成全集的内容简介 C# 用API取历史记录如何取标题 哪位大佬有有鬼住在隔壁哗鬼住正隔篱(1990)由刘仕裕导演的在线免费播放网盘资源链接分享一下 谁有霸王花3 国语高清 啊 求个链接~胡慧中的 被子沉一点好还是轻一点好 为什么被子太重,压在身上心脏会痛 被子洗过之后很重很重怎么能把他变轻 快手更新以后会有绿边怎么回事? 手机看别人快手的时候为什么别人的页面显示绿色的一会儿就正常了到底是怎么回? 为什么用调音台,KX的闪避不起作用了。 KX3552播放系统声音有杂音,(高音质)怎么调节,还有闪避怎么调节?? 快手视频为什么拍完之后什么都不显示,就是绿色 发快手变成绿色啥也看不见什么情况? 为什么我闪避调好之后 自己听的时候有闪避,。 在YY上人家听就没有效果。 怎么办呢 KX驱动 KX6调音台右下角的唱歌,闪避,喊麦如何设置和删除 创新7.1声卡怎么在调音台上没有闪避效果 怎么音台上没有闪避效果选项 请问KX效果闪避为什么自己能听到别人去听不到闪避效果 内置声卡以前是好的不知道为什么现在YY没有伴音和闪避 求高手指导设置 创新7.0声卡在歪歪放音乐试过很多方法都不能取消闪避 关于启动Intellij IDEA14 64位的问题 好听的歌 音乐考试