zoukankan      html  css  js  c++  java
  • C# 系统应用之清除Cookies、IE临时文件、历史记录 转载

    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:UsersdellAppDataRoamingMicrosoftWindowsCookies".Cookie记录用户ID、密码、浏览器过的网页、停留时间等信息.如下图所示:

    2.Windows中Internet临时文件位置为"C:UsersdellAppDataLocalMicrosoftWindowsTemporary Internet Files",它存放着最近浏览过的网页的内容(网页|图像|媒体副本等)以便以后快速查询并提高速度.

    3.Windows中IE历史记录位置为"C:UsersdellAppDataLocalMicrosoftWindowsHistory",历史记录是存放最近时间访问过的网站地址,它以时间和站点存储.如下图所示:

    IE通常清除历史记录还包括:下载历史记录、表单数据、密码、ActiveX等数据,如下图:

    二. 采用文件delete删除

    通过Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)获取Temporary Internet Files文件(Internet临时文件),并获取其中的.dat文件路径.

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    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在CODE上查看代码片派生到我的代码片
     
    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在CODE上查看代码片派生到我的代码片
     
    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.   
    11. //ShellExecute函数ShowCmd参数可选值  
    12. public enum ShowCommands : int  
    13. {  
    14.     SW_HIDE = 0,            //隐藏窗口并活动状态另一个窗口(激活)  
    15.     SW_SHOWNORMAL = 1,      //用原来的大小和位置显示窗口,激活  
    16.     SW_NORMAL = 1,          //同SW_SHOWNORMAL  
    17.     SW_SHOWMINIMIZED = 2,   //最小化窗口,激活  
    18.     SW_SHOWMAXIMIZED = 3,   //最大化窗口,激活  
    19.     SW_MAXIMIZE = 3,        //同SW_SHOWMAXIMIZED  
    20.     SW_SHOWNOACTIVATE = 4,  //用最近的大小和位置显示,不改变活动窗口(不激活)  
    21.     SW_SHOW = 5,            //同SW_SHOWNORMAL  
    22.     SW_MINIMIZE = 6,        //最小化窗口,不激活  
    23.     SW_SHOWMINNOACTIVE = 7, //同SW_MINIMIZE  
    24.     SW_SHOWNA = 8,          //同SW_SHOWNOACTIVATE  
    25.     SW_RESTORE = 9,         //同SW_SHOWNORMAL  
    26.     SW_SHOWDEFAULT = 10,    //同SW_SHOWNORMAL  
    27.     SW_FORCEMINIMIZE = 11,  //最小化窗口  
    28.     SW_MAX = 11             //同SW_SHOWNORMAL  
    29. }  

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

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    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.   
    21. //调用Win32 API  
    22. [DllImport("shell32.dll")]  
    23. static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile,   
    24.     string lpParameters, string lpDirectory, ShowCommands nShowCmd);  
    25.   
    26. //点击button1删除IE临时文件  
    27. private void button1_Click(object sender, EventArgs e)  
    28. {  
    29.     ShellExecute(IntPtr.Zero, "open", "rundll32.exe",  
    30.         "InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_SHOWMAXIMIZED);  
    31. }</span>  

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

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

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

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    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在CODE上查看代码片派生到我的代码片
     
    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)

  • 相关阅读:
    docker查看位置和占用大小
    Edgex设置日志文件时区
    VC6.0 MFC Unhandled exception in ***.exe(OLE32.DLL):0xC0000005:Access Violation
    QEMU树莓派下配置及安装软件-3
    windows下QEMU扩展树莓派分区大小-2
    windows下QEMU安装树莓派-1
    golang 升级 1.16.5 之后,编译报错 missing go.sum entry for module providing package
    linux 下 go安装问题
    EdgeX armhf编译问题
    一个SPI从机收到的前三个字节一直为0的问题
  • 原文地址:https://www.cnblogs.com/zcm123/p/4264363.html
Copyright © 2011-2022 走看看