C# 系统应用之清除Cookies、IE临时文件、历史记录

本文主要是项目"个人电脑使用记录清除软件"系类文章中关于清除浏览器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系统文件夹中的重要文件,通常情况下安装操作系统过程中自定创建.程序源代码如下:

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

其中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)

时间: 2024-11-08 19:17:28

C# 系统应用之清除Cookies、IE临时文件、历史记录的相关文章

Win7系统笔记本电脑怎样清除粘贴板内容?

  Win7系统笔记本电脑怎样清除粘贴板内容? 1.在桌面上单击右键,选择"新建"-"快捷方式"; 2.在"请输入对象的位置"后面框中输入: cmd /c "echo off | clip" 点击下一步; 3.将键入该快捷方式的名称下面框中输入:清除剪切板(输入啥都可以,目的是为了让自己知道这个是什么)点击完成; 4.当我们复制了一些东西,如果不想要了,直接双击打开"清除剪切板"就可将复制的内容清除掉了.

Win8系统如何自动清除过期动态磁贴通知

  1.按Win+R键,打开运行,输入"gpedit.msc",点击确定; 2.在打开的组策略窗口中依次展开本地计算机策略--用户配置--管理模板--开始菜单和任务栏; 3.双击"退出系统时清除瓦片通知的历史记录",即本地计算机策略--用户配置--管理模板--开始菜单和任务栏--双击退出系统时清除瓦片通知的历史记录; 4.默认是未配置状态,选择"已启动",点击应用并确定.如果你启用这个设置,操作系统将会在用户注销时删除磁帖通知,在登录系统时Met

Win7系统下彻底清除Win10更新安装包的方法

  据小编所知,win10的新增性功能真的是在广大用户中有着很好的评价,win10较前面的系统增加了许多实用性的功能,实在是棒棒的.小编也是一个特别实在的电脑,为了体验新系统的魅力特地去下载了win10系统更新安装包,但是小编发现,虽然是win10的功能性很强,但是再好的东西也是会有瑕疵,其兼容性并不大可观.无奈之下,只能下决心痛心的删除了win10更新的安装包.当小编回头去寻找更新安装之时,却意外的发现,更新安装包"失踪"了.这把小编可是搞糊涂了,该如何是好呢.小编接下来,可是请教了

Win7系统下如何清除索引记录来扩大C盘空间

  大家都知道win7系统中有个很好用的功能,就是索引功能,我们可以快速查找到需要的文件或程序,对于用户来说是个很方便的功能设置.但是对于一些电脑容量较小的用户来说也是个麻烦,因为只要我们使用win7电脑中搜索功能时,C盘就会自动保存索引记录,久而久之就会存储了很多缓存,如果长时间不清理的话就会占据C盘空间,对于电脑来说是个很大的负担.下面小编就教大家Win7通过清除索引记录文档来扩大C盘空间的方法. Win7系统下如何清除索引记录的方法如下 1.如果你不选择使用搜索功能,并打算关闭,那么可以分

清除cookies的批处理(bat)_DOS/BAT

这是个小技巧,把手动清除cookies的几步折合成了一步. 第一步:在桌面上新建一个文本文件为"一步清除cookies.txt",把扩展名改为bat,即"一步清除cookies.bat". 第二步:右键单击这个文件--"编辑"--输入" @echo off DEL/Q "C:\Documents and Settings\???\Cookies" 其中"???"可以在"开始"-

asp Cookies 写入与清除cookies程序

 '****************************************************   '函数名:ResponseCookies   '作  用:写入COOKIES   '参  数:Key ----cookie名   '        value ----cookie值   '        expires ---- cookie过期时间   '****************************************************   Public F

C# 清除cookies的代码_C#教程

不同的浏览器会把cookie文件保存在不同的地方 以下是C# WebBrowser控件cookies的存放路径 C:\Users\{你的帐号名}\AppData\Local\Microsoft\Windows\INetCookies cookies文件格式请查看相关资料 下面是清除cookies的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste

在linux系统下使用C语言操作临时文件

有时程序需要存储很大量的数据,或者在几个进程间交换数据,这时您可能考虑到使用临时文件.使用临时文件要考虑几个问题: 1.保证临时文件间的文件名不互助冲突. 2.保证临时文件中内容不被其他用户或者黑客偷看.删除和修改. 所以在linux下有专门处理临时文件的函数 mkstemp函数 mkstemp函数将在系统中以独一无二的文件名创建一个文件并打开,而且只有当前用户才有访问这个临时文件的权限,当前用户对这个临时文件可以打开并进行读.写操作.mkstemp函数只有一个参数,这个参数是个以"XXXXXX

清除COOKIES有什么作用

Cookies就是服务器暂存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机,本文简单介绍什么是cookies,cookies有什么作用,以及网站利用cookie存在什么问题. 什么是Cookies("小甜饼")呢?简单来说,Cookies就是服务器暂存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookies 会帮你在网站上所打的文字或是一些选择都记录下来