http://blog.csdn.net/Eastmount/article/details/18821221
本文主要是项目"个人电脑使用记录清除软件"系类文章中关于清除浏览器Cookies、IE临时文件、最近使用历史记录等内容.该篇文章的基本思想路线是首先了解上网历史记录的Windows中常用文件路径,再通过文件delete方法删除该文件下内容,但是很多文件不能读取的;最后的解决方案是借助RunDll32.exe的Internet实现删除缓存功能.
一. IE历史记录文件路径
Internet Explorer中有指定的文件夹存储上网记录所有信息,包括IE缓存文件、Cookies文件、最近浏览的历史记录、访问过的网址、地址栏网址及IE表格/密码记录、临时文件等.在讲述删除IE缓存之前,先简单介绍Cookie、Internet临时文件、IE历史记录的文件路径.
1.Windows中Cookie保存位置为"C:\Users\dell\AppData\Roaming\Microsoft\Windows\Cookies".Cookie记录用户ID、密码、浏览器过的网页、停留时间等信息.如下图所示:
2.Windows中Internet临时文件位置为"C:\Users\dell\AppData\Local\Microsoft\Windows\Temporary Internet Files",它存放着最近浏览过的网页的内容(网页|图像|媒体副本等)以便以后快速查询并提高速度.
3.Windows中IE历史记录位置为"C:\Users\dell\AppData\Local\Microsoft\Windows\History",历史记录是存放最近时间访问过的网站地址,它以时间和站点存储.如下图所示:
IE通常清除历史记录还包括:下载历史记录、表单数据、密码、ActiveX等数据,如下图:
二. 采用文件delete删除
通过Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)获取Temporary Internet Files文件(Internet临时文件),并获取其中的.dat文件路径.
- //获取IE临时文件
- private void button2_Click(object sender, EventArgs e)
- {
- listBox1.Items.Clear();
- string dirPath = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
- this.textBox1.Text = dirPath.ToString();
- DirectoryInfo dir = new DirectoryInfo(dirPath);
- //遍历所有的文件夹 显示.dat的文件
- foreach (FileInfo file in dir.GetFiles("*.jpg", SearchOption.AllDirectories))
- {
- try
- {
- listBox1.Items.Add(file.DirectoryName + "\\"+ file);
- //file.Delete();
- }
- catch(Exception msg) //异常处理
- {
- MessageBox.Show(msg.Message);
- }
- }
- }
同时引用命名空间using System.IO;运行结果如下所示:
这样,似乎清空该文件夹下所有文件就实现了清除Internet临时文件的功能,但是使用File.Delete(FileName)删除文件夹中文件会遇到"该文件正在另一进程使用,因此该进程无法访问此文件"或"文件访问被拒绝".因为Temporary Internet Files目录是系统文件夹,读取不到有些文件.
(该资源关于IE临时文件获取查看删除,供大家学习http://download.csdn.net/detail/jee89731/3465688)
三. 调用rundll32.exe实现
借助RunDll32.exe运行Internet选项对应dll文件,实现清除IE缓存(Internet临时文件、Cookies、浏览器历史记录、表单记录、用户名密码等).
<一>.rundll32.exe
rundll32.exe(运行32位dll文件)的作用是执行DLL文件中的内部函数,通过命令行方式调用动态链接程序库,其命令行的使用方法是:Rundll32.exe DLLname,Functionname [Arguments].(其中DLLname为需要执行DLL文件名,Functionname为执行DLL文件的具体引用函数,[Arguments]为引出函数的具体参数).
Ctrl+R调用运行输入指令执行,可运行相应的操作.如rundll32.exe shell32.dll,Control_RunDLL功能就是执行显示控制面板.其中关于清除IE缓存操作如下:
- //1.History (历史记录)
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
- //2.Cookies
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
- //3.Temporary Internet Files (Internet临时文件)
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
- //4.Form. Data (表单数据)
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
- //5.Passwords (密码)
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
- //6.Delete All (全部删除)
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
- //7.Delete All - "Also delete files and settings stored by add-ons"
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351
<二>.ShellExecute
采用调用Win32 API函数ShellExecute()执行上面命令行实现清除功能的.ShellExecute的功能是运行一个外部程序或者是打开一个已注册的文件、打开一个目录、打印一个文件等等,并对外部程序有一定的控制.它的函数原型及参数定义如下:
- //ShellExecute函数运行一个外部程序并对程序进行控制(执行成功返回应用程序句柄)
- static extern IntPtr ShellExecute(
- IntPtr hwnd, //用于指定父窗口句柄
- string lpOperation, //用于指定要进行的操作.其中open打开FileName指定文件或文件夹 print打印 explore浏览(runas edit find)
- string lpFileName, //用于指定要操作的文件名或要执行的程序文件名
- string lpParameters, //给要打开程序指定参数.若FileName是可执行程序,则此参数指定命令行参数.否则打开的是文件此处参数为nil
- string lpDirectory, //缺省目录,用于指定默认目录
- ShowCommands nShowCmd //打开选项.若FileName参数是可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数为0
- );
- //ShellExecute函数ShowCmd参数可选值
- public enum ShowCommands : int
- {
- SW_HIDE = 0, //隐藏窗口并活动状态另一个窗口(激活)
- SW_SHOWNORMAL = 1, //用原来的大小和位置显示窗口,激活
- SW_NORMAL = 1, //同SW_SHOWNORMAL
- SW_SHOWMINIMIZED = 2, //最小化窗口,激活
- SW_SHOWMAXIMIZED = 3, //最大化窗口,激活
- SW_MAXIMIZE = 3, //同SW_SHOWMAXIMIZED
- SW_SHOWNOACTIVATE = 4, //用最近的大小和位置显示,不改变活动窗口(不激活)
- SW_SHOW = 5, //同SW_SHOWNORMAL
- SW_MINIMIZE = 6, //最小化窗口,不激活
- SW_SHOWMINNOACTIVE = 7, //同SW_MINIMIZE
- SW_SHOWNA = 8, //同SW_SHOWNOACTIVATE
- SW_RESTORE = 9, //同SW_SHOWNORMAL
- SW_SHOWDEFAULT = 10, //同SW_SHOWNORMAL
- SW_FORCEMINIMIZE = 11, //最小化窗口
- SW_MAX = 11 //同SW_SHOWNORMAL
- }
通过[DllImport("shell32.dll")]来调用Win32 API(这些API是微软提供的程序接口),导入后才能调用API声明形式所在类库.而shell32.dll该系统文件是存放在Windows系统文件夹中的重要文件,通常情况下安装操作系统过程中自定创建.程序源代码如下:
- <span style="font-size:14px;">//ShellExecute函数ShowCmd参数可选值
- public enum ShowCommands : int
- {
- SW_HIDE = 0,
- SW_SHOWNORMAL = 1,
- SW_NORMAL = 1,
- SW_SHOWMINIMIZED = 2,
- SW_SHOWMAXIMIZED = 3,
- SW_MAXIMIZE = 3,
- SW_SHOWNOACTIVATE = 4,
- SW_SHOW = 5,
- SW_MINIMIZE = 6,
- SW_SHOWMINNOACTIVE = 7,
- SW_SHOWNA = 8,
- SW_RESTORE = 9,
- SW_SHOWDEFAULT = 10,
- SW_FORCEMINIMIZE = 11,
- SW_MAX = 11
- }
- //调用Win32 API
- [DllImport("shell32.dll")]
- static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile,
- string lpParameters, string lpDirectory, ShowCommands nShowCmd);
- //点击button1删除IE临时文件
- private void button1_Click(object sender, EventArgs e)
- {
- ShellExecute(IntPtr.Zero, "open", "rundll32.exe",
- "InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_SHOWMAXIMIZED);
- }</span>
其中DllImport需要引用命名控件using System.Runtime.InteropServices;同时它RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255删除所有文件.IntPtr结构用于表示指针或句柄特定类型,IntPtr.Zero初始化为零的句柄.运行结果如下图所示:
注意:虽然学习了ShellExecute的具体使用方法,但是还是关于ShowCommands参数没有弄明白它具体的变化;同时相关方面书籍太少,希望大家提供些这方面书籍和更好的方法.
<三>.ShellExecute功能扩展
ShellExecute()函数还用很多功能可以给大家带来方便,下面介绍简单几个用法.(替换上面button1代码)
- //调用rundll32.exe清除历史记录
- ShellExecute(IntPtr.Zero, "open", "rundll32.exe",
- "InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_SHOWMAXIMIZED);
- //访问csdn eastmount博客
- ShellExecute(this.Handle, "open", "http://blog.csdn.net/eastmount",
- null, null, ShowCommands.SW_SHOW);
- //发送邮件
- ShellExecute(this.Handle, "open", "mailto:eastmount@163.com",
- null, null, ShowCommands.SW_SHOW);
- //调用calc.exe打开计算器
- ShellExecute(this.Handle, "open", "calc.exe", null, null, ShowCommands.SW_FORCEMINIMIZE);
- //调用NOTEPAD.EXE打开记事本
- ShellExecute(this.Handle, "open", "NOTEPAD.EXE", null, null, ShowCommands.SW_SHOWNORMAL);
<四>.调用Process启动RunDll32.exe
借助RunDll32,exe运行Internet选项实现删除临时文件也可以调用Process启动RunDll32.exe实现.下面代码仅供参考,我没有研究该方法,仅作为在线笔记供自己查看:
- //清除ie缓存、cookie以及一切记录
- private void IEclear()
- {
- Process process = new Process();
- process.StartInfo.FileName = "RunDll32.exe";
- process.StartInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 255";
- process.StartInfo.UseShellExecute = false; //关闭Shell的使用
- process.StartInfo.RedirectStandardInput = true; //重定向标准输入
- process.StartInfo.RedirectStandardOutput = true; //重定向标准输出
- process.StartInfo.RedirectStandardError = true; //重定向错误输出
- process.StartInfo.CreateNoWindow = true;
- process.Start();
- }
四. 总结
该文章主要结合自己的项目清除浏览器的Cookies、IE临时文件、最近历史记录,文章很好的展现了我的思想:
1.首先作者想到获取相应的指定文件的路径,清空该路径下的文件即可实现该功能;
2.但是由于系统文件不能访问或停止,所以作者寻找到了借助RunDll32.exe实现,主要讲述调用Win32 API函数ShellExecute删除IE缓存;
3.最后补充了ShellExcute()函数的功能和其他操作、调用Process启动RunDll32.exe的代码.
同时作者在系列文章中先讲述了获取Windows最近使用历史记录文章、Cookies和Session的使用,最后才完成该文章实现清除历史记录操作(其他方法同理).
文章引用了百度百科C#清除IE临时文件缓存cookies的方法 |xueer8835的文章 | zjw的文章 | Adam Viki的文章|CSDN删除cookie讨论 感谢这些作者,也希望大家可以通过该链接学习.
最后希望该文章对大家有所帮助,如果有错误或不足之处,请大家海涵!
(By:Eastmount 2014-1-28 夜1点http://blog.csdn.net/eastmount)
C# 系统应用之清除Cookies、IE临时文件、历史记录 转载的更多相关文章
-
C# 清除cookies
不同的浏览器会把cookie文件保存在不同的地方 以下是C# WebBrowser控件cookies的存放路径 C:\Users\{你的帐号名}\AppData\Local\Microsoft\Win ...
-
联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/details/72571674
联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/ ...
-
Vista/Win7以上系统查看和清除本地DNS缓存新方法
你是否因修改网站DNS解析后,却因本机DNS缓存而需要等待... 你是否遇到修改了本机的hosts文件后,必须重起firefox和ie才起作用... 其实只要清空DNS缓存这些问题都可以解决. 查看D ...
-
.DS_Store文件是什么?Mac系统如何彻底清除该文件?
用过Mac OS系统的都会注意到一个名为.DS_Store的隐藏文件,尤其是zip格式的压缩包解压的出来,会出现在各种文件夹内,非常烦人! 特别是把文件分享给使用windows的朋友的时候,这些文件会 ...
-
清除Chrome浏览器的历史记录、缓存
习惯了用360卫士清理浏览器缓存.历史记录等垃圾文件,但是今天用360清理过后,打开谷歌浏览器Chrome时, 发现它的历史记录(CTRL+ H)根本没有被清理掉,经过一番探索后,可以通过下面方法清除 ...
-
Oracle系统表整理+常用SQL语句收集(转载)
原文:https://www.cnblogs.com/jiangxinnju/p/5840420.html-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是 ...
-
徐汉彬:亿级Web系统搭建——单机到分布式集群(转载)
文章转载自http://www.csdn.net/article/2014-11-06/2822529/1 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的 ...
-
Linux系统下安装rz/sz命令及使用说明(转载)
对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们 ...
-
Linux系统挂载点与分区的关系(转载)
计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区.在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区.主分区是能够 ...
随机推荐
-
mysql如何在一个字段后面加个字符?
update city set 字段=concat(字段,'内容');
-
Js位置与大小(1)&mdash;&mdash;正确理解和运用与尺寸大小相关的DOM属性
在web开发中,不可避免遇到要计算元素大小以及位置的问题,解决这类问题的方法是利用DOM提供的一些API结合兼容性处理来,所有内容大概分3篇左右的文章的来说明.本文作为第一篇,介绍DOM提供的与尺寸大 ...
-
Window程序的安装与部署
步骤: 1.新建项目—选择安装与部署—安装项目或使用安装向导,再这里我用的是安装向导 2.点击确定—下一步 3.点击下一步,选择主输出 4.点击下一步,添加文件 5.点击完成 设置: 右击安装项目 出 ...
-
javascript中json解密
一直以前都会断断续续会碰到js中的json数据的解析,下面凭着自己的经验,简单的讲解一下在js中的json的几种解析方法. 一.jquery的方式 首先你得先得到数据,一般都是jquery的ajax ...
-
JSBinding + SharpKit / JavaScript 加载流程
首先,现在的方案是游戏启动就加载全部的 JavaScript 代码. 先看下 StreamingAssets/JavaScript/ 文件夹下的目录结构:
-
ListView中内容的动画效果
LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,可以在XML文件中设置,亦可以在Java代码中设置. 一种直接在 ...
-
Oracle 数据库用户管理
Oracle 数据库用户管理 Oracle 权限设置 一.权限分类: 系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限 ...
-
IOS百度地图语音导航
VoiceNavigationViewController.m * 客户端需安装百度导航地图 #import "VoiceNavigationViewController.h" # ...
-
Oozie时出现Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure?
不多说,直接上干货! 问题详情 [hadoop@bigdatamaster oozie--cdh5.5.4]$ bin/ooziedb.sh create -sqlfile oozie.sql -ru ...
-
-------- ROOTKIT 核心技术——系统服务调度表挂钩调试(PART III) --------
---------------------------------------------------------------------------------------- 本篇开始进行真枪实弹的 ...