日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2024/5/28 C# 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 系统应用之获取IE浏览记录和IE地址栏输入网址 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該文章是“個人電腦歷史記錄清除軟件”項目的系統應用系列文章.
前面"
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地址栏输入网址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。