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文件路径.

[csharp] view plaincopy
  1. //获取IE临时文件
  2. private void button2_Click(object sender, EventArgs e)
  3. {
  4. listBox1.Items.Clear();
  5. string dirPath = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
  6. this.textBox1.Text = dirPath.ToString();
  7. DirectoryInfo dir = new DirectoryInfo(dirPath);
  8. //遍历所有的文件夹 显示.dat的文件
  9. foreach (FileInfo file in dir.GetFiles("*.jpg", SearchOption.AllDirectories))
  10. {
  11. try
  12. {
  13. listBox1.Items.Add(file.DirectoryName + "\\"+ file);
  14. //file.Delete();
  15. }
  16. catch(Exception msg)     //异常处理
  17. {
  18. MessageBox.Show(msg.Message);
  19. }
  20. }
  21. }

同时引用命名空间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缓存操作如下:

[csharp] view plaincopy
  1. //1.History (历史记录)
  2. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
  3. //2.Cookies
  4. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
  5. //3.Temporary Internet Files (Internet临时文件)
  6. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
  7. //4.Form. Data (表单数据)
  8. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
  9. //5.Passwords (密码)
  10. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
  11. //6.Delete All (全部删除)
  12. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
  13. //7.Delete All - "Also delete files and settings stored by add-ons"
  14. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351

<二>.ShellExecute

采用调用Win32 API函数ShellExecute()执行上面命令行实现清除功能的.ShellExecute的功能是运行一个外部程序或者是打开一个已注册的文件、打开一个目录、打印一个文件等等,并对外部程序有一定的控制.它的函数原型及参数定义如下:

[csharp] view plaincopy
  1. //ShellExecute函数运行一个外部程序并对程序进行控制(执行成功返回应用程序句柄)
  2. static extern IntPtr ShellExecute(
  3. IntPtr hwnd,           //用于指定父窗口句柄
  4. string lpOperation,    //用于指定要进行的操作.其中open打开FileName指定文件或文件夹 print打印 explore浏览(runas edit find)
  5. string lpFileName,     //用于指定要操作的文件名或要执行的程序文件名
  6. string lpParameters,   //给要打开程序指定参数.若FileName是可执行程序,则此参数指定命令行参数.否则打开的是文件此处参数为nil
  7. string lpDirectory,    //缺省目录,用于指定默认目录
  8. ShowCommands nShowCmd  //打开选项.若FileName参数是可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数为0
  9. );
  10. //ShellExecute函数ShowCmd参数可选值
  11. public enum ShowCommands : int
  12. {
  13. SW_HIDE = 0,            //隐藏窗口并活动状态另一个窗口(激活)
  14. SW_SHOWNORMAL = 1,      //用原来的大小和位置显示窗口,激活
  15. SW_NORMAL = 1,          //同SW_SHOWNORMAL
  16. SW_SHOWMINIMIZED = 2,   //最小化窗口,激活
  17. SW_SHOWMAXIMIZED = 3,   //最大化窗口,激活
  18. SW_MAXIMIZE = 3,        //同SW_SHOWMAXIMIZED
  19. SW_SHOWNOACTIVATE = 4,  //用最近的大小和位置显示,不改变活动窗口(不激活)
  20. SW_SHOW = 5,            //同SW_SHOWNORMAL
  21. SW_MINIMIZE = 6,        //最小化窗口,不激活
  22. SW_SHOWMINNOACTIVE = 7, //同SW_MINIMIZE
  23. SW_SHOWNA = 8,          //同SW_SHOWNOACTIVATE
  24. SW_RESTORE = 9,         //同SW_SHOWNORMAL
  25. SW_SHOWDEFAULT = 10,    //同SW_SHOWNORMAL
  26. SW_FORCEMINIMIZE = 11,  //最小化窗口
  27. SW_MAX = 11             //同SW_SHOWNORMAL
  28. }

通过[DllImport("shell32.dll")]来调用Win32 API(这些API是微软提供的程序接口),导入后才能调用API声明形式所在类库.而shell32.dll该系统文件是存放在Windows系统文件夹中的重要文件,通常情况下安装操作系统过程中自定创建.程序源代码如下:

[csharp] view plaincopy
  1. <span style="font-size:14px;">//ShellExecute函数ShowCmd参数可选值
  2. public enum ShowCommands : int
  3. {
  4. SW_HIDE = 0,
  5. SW_SHOWNORMAL = 1,
  6. SW_NORMAL = 1,
  7. SW_SHOWMINIMIZED = 2,
  8. SW_SHOWMAXIMIZED = 3,
  9. SW_MAXIMIZE = 3,
  10. SW_SHOWNOACTIVATE = 4,
  11. SW_SHOW = 5,
  12. SW_MINIMIZE = 6,
  13. SW_SHOWMINNOACTIVE = 7,
  14. SW_SHOWNA = 8,
  15. SW_RESTORE = 9,
  16. SW_SHOWDEFAULT = 10,
  17. SW_FORCEMINIMIZE = 11,
  18. SW_MAX = 11
  19. }
  20. //调用Win32 API
  21. [DllImport("shell32.dll")]
  22. static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile,
  23. string lpParameters, string lpDirectory, ShowCommands nShowCmd);
  24. //点击button1删除IE临时文件
  25. private void button1_Click(object sender, EventArgs e)
  26. {
  27. ShellExecute(IntPtr.Zero, "open", "rundll32.exe",
  28. "InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_SHOWMAXIMIZED);
  29. }</span>

其中DllImport需要引用命名控件using System.Runtime.InteropServices;同时它RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255删除所有文件.IntPtr结构用于表示指针或句柄特定类型,IntPtr.Zero初始化为零的句柄.运行结果如下图所示:

注意:虽然学习了ShellExecute的具体使用方法,但是还是关于ShowCommands参数没有弄明白它具体的变化;同时相关方面书籍太少,希望大家提供些这方面书籍和更好的方法.

<三>.ShellExecute功能扩展
ShellExecute()函数还用很多功能可以给大家带来方便,下面介绍简单几个用法.(替换上面button1代码)

[csharp] view plaincopy
  1. //调用rundll32.exe清除历史记录
  2. ShellExecute(IntPtr.Zero, "open", "rundll32.exe",
  3. "InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_SHOWMAXIMIZED);
  4. //访问csdn eastmount博客
  5. ShellExecute(this.Handle, "open", "http://blog.csdn.net/eastmount",
  6. null, null, ShowCommands.SW_SHOW);
  7. //发送邮件
  8. ShellExecute(this.Handle, "open", "mailto:eastmount@163.com",
  9. null, null, ShowCommands.SW_SHOW);
  10. //调用calc.exe打开计算器
  11. ShellExecute(this.Handle, "open", "calc.exe", null, null, ShowCommands.SW_FORCEMINIMIZE);
  12. //调用NOTEPAD.EXE打开记事本
  13. ShellExecute(this.Handle, "open", "NOTEPAD.EXE", null, null, ShowCommands.SW_SHOWNORMAL);

<四>.调用Process启动RunDll32.exe

借助RunDll32,exe运行Internet选项实现删除临时文件也可以调用Process启动RunDll32.exe实现.下面代码仅供参考,我没有研究该方法,仅作为在线笔记供自己查看:

[csharp] view plaincopy
  1. //清除ie缓存、cookie以及一切记录
  2. private void IEclear()
  3. {
  4. Process process = new Process();
  5. process.StartInfo.FileName = "RunDll32.exe";
  6. process.StartInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 255";
  7. process.StartInfo.UseShellExecute = false;        //关闭Shell的使用
  8. process.StartInfo.RedirectStandardInput = true;   //重定向标准输入
  9. process.StartInfo.RedirectStandardOutput = true;  //重定向标准输出
  10. process.StartInfo.RedirectStandardError = true;   //重定向错误输出
  11. process.StartInfo.CreateNoWindow = true;
  12. process.Start();
  13. }

四. 总结

该文章主要结合自己的项目清除浏览器的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)

转载于:https://www.cnblogs.com/zcm123/p/4264363.html

C# 系统应用之清除Cookies、IE临时文件、历史记录 转载相关推荐

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

    本文主要是项目"个人电脑使用记录清除软件"系类文章中关于清除浏览器Cookies.IE临时文件.最近使用历史记录等内容.该篇文章的基本思想路线是首先了解上网历史记录的Windows ...

  2. django关闭浏览器,怎样清除 cookies 和 session

    django关闭浏览器,怎样清除 cookies 和 session 设 置 Cookie: def cookie_set(): response = HttpResponse(" 设置 C ...

  3. 鸿蒙系统有通知服务器吗,鸿蒙系统通知栏怎么清除和打开?鸿蒙系统没有下拉菜单怎么回事?...

    华为新发布的全新鸿蒙系统已上线一周左右的时间了,整体的功能来说的话还是不错的,进步升级的空间很大,不过小问题也是很多的,比如有的小伙伴反馈称升级之后找不到下拉菜单以及通知栏了,也不清楚通知栏是怎么删除 ...

  4. pe系统清除服务器密码吗,雨林木风pe系统登录密码清除工具使用教程?

    雨林木风pe系统登录密码清除工具使用教程? 部分用户会在自己的电脑上设置开机登录密码,但是有时会突然忘记登录密码是多少了,那么这时候该怎么来解决?今天雨林木风小编就使用"登录密码清除&quo ...

  5. 如何清除cookies?

    其实这是一个很简单的问题,但是如果一不注意又会搞错,查都不知道怎么查. 清除cookies其实就是修改cookies,把cookies的过期日提前罢了 比如一个"注销登陆"的按钮, ...

  6. 一个划时代的病毒“鬼影”袭击WinXP系统(重装无法清除)如何防范查杀?

    电脑中毒怎么办?在此之前我们菜鸟级的都知道最常用最有效的除毒方法就是重装系统!但现在,这已经成为历史.就在今天3月15日,金山安全实验室捕获一种被命名为"鬼影"的电脑病毒,该病毒寄 ...

  7. redhat和ubuntu系统下挂载ntfs文件系统的方法(转载)

    1.首先确定你的linux kernel版本是什么(Redhat9.0默认的kernel版本是2.4.20-8 )  #> rpm -qa|grep kernel  会显示类式的如下信息:  k ...

  8. 自动投票系统【四】C# 清除Cookies

    现在都已经准备好了就欠东风了cookies和更换ip. 在越来越多的网站使用了Cookie技术,它给我们带来方便的同时,也给我们带来了一点小麻烦. 比如网站的自动登录. 在网上没有找到合适的代码,于是 ...

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

    有时程序需要存储很大量的数据,或者在几个进程间交换数据,这时您可能考虑到使用临时文件.使用临时文件要考虑几个问题: 1.保证临时文件间的文件名不互助冲突. 2.保证临时文件中内容不被其他用户或者黑客偷 ...

最新文章

  1. 爬取王垠的博客并生成pdf
  2. 谈钱太俗!难道开源软件只能讲道义?
  3. ITK:在灰度图像中标记连接的组件
  4. thinkphp5多级控制器是什么?怎么使用?
  5. 多项式全家桶学习笔记【持续更新】
  6. Java高级应用开发之Servlet
  7. 【华为云技术分享】云图说|第三方云厂商数据如何迁移至华为云OBS?真相在这里......
  8. 前端—每天5道面试题(十二)
  9. EDUCoder编程练习题解(一维数组和二维数组)
  10. [C#][共享网络] Netsh命令实现共享,并查询连接用户
  11. java学习代码01 范围:基本测试、标识符、数据类型、运算符、控制语句
  12. 太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏
  13. word教程之word2007和2010版本查找和替换快捷键介绍
  14. 打印可自定义的字母金字塔(python实现)
  15. 数学建模中数据处理类型题目的主要处理流程与方法
  16. 上传本地项目到github远程仓库
  17. kolla 部署openstack train版本(三节点controller+compute+storage)------功能测试
  18. return 和return:redirect:/**
  19. 【ARM裸机s5pv210 】程序烧录
  20. 全排列Permutation

热门文章

  1. Linux文件压缩与归档
  2. JavaScript中的作用域,闭包和上下文
  3. Linux 时钟精度 与 PostgreSQL auto_explain (explain timing 时钟开销估算)
  4. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...
  5. Eclipse中SVN的安装步骤(两种)和用法
  6. 不用IIS运行ASP.Net网站
  7. sys和system的区别
  8. Mio C220破解问题
  9. 究竟该不该“勃”!!!
  10. 5G 标准 — 3GPP