该文章是“个人电脑历史记录清除软件”项目的系统应用系列文章.
前面"
C# 系统应用之清除Cookies、IE临时文件、历史记录"中已经讲述了借助RunDll32.exe运行dll文件实现清除IE缓存操作,同时网上有很多方法讲述删除操作的,但怎样获取IE浏览器中最近浏览的网站历史记录和IE浏览器的地址栏输入的网址呢?这是我这篇文章需要讲解的知识.

一.Environment.GetFolderPath方法获取IE历史记录

前文说过在Windows中IE历史记录的位置为:"C:\Users\dell\AppData\Local\Microsoft\Windows\History",历史记录是存放最近时间访问过的网站地址,它以时间和站点存储.如下图所示:

那么,我们可以通过Environment.GetFolderPath(Environment.SpecialFolder.History)获取IE历史记录.

private void button3_Click(object sender, EventArgs e)
{//清空listBoxlistBox1.Items.Clear();//获取Internet历史记录文件路径string dirPath = Environment.GetFolderPath(Environment.SpecialFolder.History);listBox1.Items.Add("Internet历史记录路径:");listBox1.Items.Add(dirPath);//遍历所有的文件夹 显示所有文件DirectoryInfo dir = new DirectoryInfo(dirPath);int num = 1;foreach (FileInfo file in dir.GetFiles("*.*", SearchOption.AllDirectories)){try{listBox1.Items.Add("(" + num + ")   " + file);num++;}catch (Exception msg)     //异常处理{MessageBox.Show(msg.Message);}}
}

其中Environment.GetFolderPath(Environment.SpecialFolder.XXX)用于检索系统特殊文件夹的路径,常见有:
(1).History 用作 Internet 历史记录项的公共储存库的目录
(2).Cookies 用作 Internet Cookie 的公共储存库的目录
(3).InternetCache 用作 Internet 临时文件的公共储存库的目录
(4).Recent 包含用户最近使用过的文档的目录
(5).MyPictures “My Pictures”文件夹
(6).MyDocuments “我的电脑”文件夹
(7).ProgramFiles “Program files”目录
但是运行它进行删除delete操作或获取操作时,它常常会有系统文件,很多文件不能访问到.在删除中就会遇到"该文件正在另一进程使用,因此该进程无法访问此文件"或"文件访问被拒绝".而采用RunDll32.exe调用Win32 API函数ShellExecute()执行实现的.同样,使用它获取得到的历史记录如下图所示.显然不是我想要的结果,同时在清除Cookies后还是能显示很多Cookies信息.猜测是Google、360等浏览器的?

二.RegistryKey注册表获取IE地址栏网址

打开运行(Ctrl+R)并输入"regedit"打开注册表,在"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs"下可以看见最近使用IE浏览器在地址栏输入的网址,如下图所示:

其中对应的IE浏览器如下图所示:

通过下面的代码,借助RegistryKey注册表顶级节点和获取该路径下的文件,即可显示相应的显示IE浏览器的地址栏网址.注意RegistryKey需要引用命名空间using Microsoft.Win32.

/// <summary>
/// 获取IE地址栏输入网址
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{//定义注册表顶级节点 其命名空间是using Microsoft.Win32;RegistryKey historykey;//检索当前用户CurrentUser子项Software\\Microsoft\\Internet Explorer\\typedURLshistorykey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet Explorer\\typedURLs", true);if (historykey != null){//获取检索的所有值String[] names = historykey.GetValueNames();foreach (String str in names){listBox1.Items.Add(historykey.GetValue(str).ToString());}}else{MessageBox.Show(this, "IE地址栏没有要删除的网址", "提示对话框", MessageBoxButtons.OK, MessageBoxIcon.Warning);}
}

运行结果如下图所示:

三.COM接口IUrlHistoryStg2获取IE浏览记录

这里主要通过王集鹄老师讲述的方法,通过IE提供的COM接口实现的.在此感谢他的文章.
参考文章:
http://bbs.csdn.net/topics/290070046代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;  //命名空间
using System.Reflection;               //提供加载类型 Pointer指针
using Microsoft.Win32;                 //RegistryKeynamespace GetIE
{#region COM接口实现获取IE历史记录//自定义结构 IUrlHistorypublic struct STATURL{public static uint SIZEOF_STATURL =(uint)Marshal.SizeOf(typeof(STATURL));public uint cbSize;                    //网页大小[MarshalAs(UnmanagedType.LPWStr)]      //网页Urlpublic string pwcsUrl;[MarshalAs(UnmanagedType.LPWStr)]      //网页标题public string pwcsTitle;public System.Runtime.InteropServices.ComTypes.FILETIMEftLastVisited,                     //网页最近访问时间ftLastUpdated,                     //网页最近更新时间ftExpires;public uint dwFlags;}//ComImport属性通过guid调用com组件[ComImport, Guid("3C374A42-BAE4-11CF-BF7D-00AA006946EE"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IEnumSTATURL{[PreserveSig]//搜索IE历史记录匹配的搜索模式并复制到指定缓冲区uint Next(uint celt, out STATURL rgelt, out uint pceltFetched);void Skip(uint celt);void Reset();void Clone(out IEnumSTATURL ppenum);void SetFilter([MarshalAs(UnmanagedType.LPWStr)] string poszFilter,uint dwFlags);}[ComImport, Guid("AFA0DC11-C313-11d0-831A-00C04FD5AE38"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IUrlHistoryStg2{#region IUrlHistoryStg methodsvoid AddUrl([MarshalAs(UnmanagedType.LPWStr)] string pocsUrl,[MarshalAs(UnmanagedType.LPWStr)] string pocsTitle,uint dwFlags);void DeleteUrl([MarshalAs(UnmanagedType.LPWStr)] string pocsUrl,uint dwFlags);void QueryUrl([MarshalAs(UnmanagedType.LPWStr)] string pocsUrl,uint dwFlags,ref STATURL lpSTATURL);void BindToObject([MarshalAs(UnmanagedType.LPWStr)] string pocsUrl,ref Guid riid,[MarshalAs(UnmanagedType.IUnknown)] out object ppvOut);IEnumSTATURL EnumUrls();#endregionvoid AddUrlAndNotify([MarshalAs(UnmanagedType.LPWStr)] string pocsUrl,[MarshalAs(UnmanagedType.LPWStr)] string pocsTitle,uint dwFlags,[MarshalAs(UnmanagedType.Bool)] bool fWriteHistory,[MarshalAs(UnmanagedType.IUnknown)] object    /*IOleCommandTarget*/poctNotify,[MarshalAs(UnmanagedType.IUnknown)] object punkISFolder);void ClearHistory();       //清除历史记录}[ComImport, Guid("3C374A40-BAE4-11CF-BF7D-00AA006946EE")]class UrlHistory /* : IUrlHistoryStg[2] */ { }#endregion//调用COM接口IUrHistory方法实现public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){IUrlHistoryStg2 vUrlHistoryStg2 = (IUrlHistoryStg2)new UrlHistory();IEnumSTATURL vEnumSTATURL = vUrlHistoryStg2.EnumUrls();STATURL vSTATURL;uint vFectched;while (vEnumSTATURL.Next(1, out vSTATURL, out vFectched) == 0){          richTextBox1.AppendText(string.Format("{0}\r\n{1}\r\n",vSTATURL.pwcsTitle, vSTATURL.pwcsUrl));}}}
}

经过我的处理后运行结果如下图所示:

这里也提供他的一篇文章,采用另外一种方法调用IE的API函数实现 http://blog.sina.com.cn/s/blog_589d32f5010007xf.html
但是我也遇到了一个问题,就是它的ftLastVisited(The last time the user visited this page)存储该网页最后访问时间,想通过该时间进行获取今天访问的或排序输出前100.但是获取该时间时总输出错误,同时将FILETIME转换成SYSTEMTIME或time_t都没成功.希望以后能解决.
最后该文章主要是结合自己的实际东西讲解,如果你刚好遇到类似的问题就可能对你有所帮助.同时如果在文章中遇到错误或不足的地方,请海涵!最重要的是感谢上面提到的博主.希望能把获取时间等问题也解决.请尊重作者的劳动果实,勿喷!!!
(By:Eastmount 2014-4-3 夜2点半 原创CSDNhttp://blog.csdn.net/eastmount/)

C# 系统应用之获取IE浏览记录和IE地址栏输入网址相关推荐

  1. Android 系统搜索框(有浏览记录)

    实现Android 系统搜索框(有浏览记录),先看下效果: 一.配置搜索描述文件 要在res中的xml文件加创建sreachable.xml,内容如下: <?xml version=" ...

  2. 浏览器之旅:从输入网址到页面呈现的神秘过程揭秘(一)

    亲爱的IT战友们,今天我们要一起探讨一个平时经常遇到,却容易忽视的话题:当我们在浏览器中输入一个网址,按下回车键,神奇的事情就发生了--网页渲染出来!这个过程到底经历了哪些环节呢?一起来揭开神秘的面纱 ...

  3. 商城系统PageBean分页 Cookie存储浏览记录

    封装实体类:PageBean public class PageBean<T> {private int currentPage;//当前页private int currentCount ...

  4. C# 系统应用之通过注册表获取USB使用记录(一)

    该文章是"个人电脑历史记录清除软件"项目的系统应用系列文章. 前面已经讲述了如何清除IE浏览器的历史记录.获取Windows最近访问文件记录.清除回收站等功能.现在我需要完成的是删 ...

  5. c# u盘使用记录_C# 系统应用之通过注册表获取USB使用记录(一)

    该文章是"个人电脑历史记录清除软件"项目的系统应用系列文章. 前面已经讲述了如何清除IE浏览器的历史记录.获取Windows最近访问文件记录.清除回收站等功能.现在我需要完成的是删 ...

  6. 使用redis存储历史浏览记录

    使用redis存储历史浏览记录 核心是分析流程 1.什么时候需要添加历史浏览记录? 访问具体商品详情页面时 2.什么时候需要获取历史浏览记录? 根据具体情况而定 3.存储在哪? redis数据库,如果 ...

  7. 使用redis存储用户的浏览记录

    用户历史浏览记录:1).什么时候添加历史浏览记录:访问商品的详情页面的时候,添加历史浏览记录2).什么时候获取历史浏览记录:访问用户中心个人信息页的时候获取历史浏览记录3).历史浏览记录需要存储在哪里 ...

  8. Cookie实现记录用户浏览记录

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  9. easyui onclickrow 中获取列名_获取Chrome浏览器历史浏览记录实例

    1.获取谷歌浏览器浏览历史保存位置,并拷贝一份到操作目录下2.找到浏览记录文件 "History"3.将"History"文件导出到其他目录下4.查看数据库ta ...

最新文章

  1. python3基本数据类型
  2. 4G室内直放站_室内信号不太好,安装一个手机信号放大器,有效果吗?
  3. boost::core模块实现分配器解除分配
  4. 编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)
  5. 一本通1261:【例9.5】城市交通路网
  6. Maria数据库怎么复制到mysql_mysql/mariadb主从复制
  7. 如何使用AForge调用本机摄像头
  8. selenium-模拟登录QQ空间(附模拟滑动验证码)
  9. 【打印机】连接共享打印机找不到网络路径解决方案
  10. C++内存空间:静态存储区、栈、堆、文字常量区、程序代码区
  11. vue视频通话(Agora声网)
  12. c语言统计出现个数,C语言统计数字出现的个数
  13. Unity 场景练习02 仿风之旅人
  14. 数据库:一条sql语句查询每门课程都大于80分的学生姓名
  15. C语言基础入门——打印“hello word“
  16. 新入职百度某员工发飙:前人代码写得像一坨屎,不能忍受,颠覆了对大厂的认知,...
  17. 求生之路2rpg服务器账号跨服,求生之路2官方地图指令大全及地图文件夹位置说明...
  18. 计算机高中教育日志,高中信息技术研修日志
  19. 2014年国人开发的最热门的开源软件TOP 100
  20. spring mvc中实现csrf安全防御简记

热门文章

  1. cmd的rd命令简单解析
  2. SGU 183. Painting the balls( dp )
  3. android_launcher的源码详细分析
  4. [linux]cp和mv对文件和链接影响的区别
  5. 数仓和mysql的区别_数据库和数据仓库的区别和联系
  6. html中的标签在xml中被识别为什么,在strings.xml中定义html标签
  7. mysql主从数据库设计_mysql数据库主从库镜像原理及配置
  8. vector删除第i个元素_LeetCode每日一题 Q215数组中的第K个最大元素
  9. Java黑皮书课后题第5章:*5.51(最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀
  10. C语言学习之将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1. 要求改为1,4,5,6,8。