454
技術社區[雲棲]
C# 係統應用之獲取Windows最近使用記錄
由於畢業設計項目需要刪除Windows最近曆史記錄,這就需要獲取Windows最近曆史記錄 Recent.本文就主要敘述通過C#實現獲取Recent中使用的文件和文件夾.首先聲明該文章主要是結合自己的畢設項目,同時的主要代碼來自Level Up的博客.在此非常感謝該博主,也希望大家學習他的文章: https://www.dotblogs.com.tw/larrynung/archive/2012/09/27/75118.aspx
一.Windows最近曆史記錄
在Windows係統中有Recent Items或Recent這樣的東西存儲最近使用的文件和文件夾的曆史記錄,通過快捷鍵"Windows+R"打開運行輸入"recent"可以打開最近瀏覽文件和文件夾如下圖所示:
當我們瀏覽文件時,它會自動的以快捷的方式存儲曆史記錄,Windows會自動添加到該文件夾下記錄係統最近使用的文件或文件夾,同樣Office、Cookies等都有相對應的Recent.我們可以通過Environment.GetFolderPath(Environment.SpecialFolder.Recent)獲取Windows的Recent最近曆史記錄的位置,我電腦中recent的路徑為
"C:\Users\dell\AppData\Roaming\Microsoft\Windows\Recent".
同時由於該獲取較簡單,就不詳細敘述.補充C#獲取桌麵、Recent、我的文檔、我的音樂、Cookies等路徑參考文章https://hi.baidu.com/ysuhy/item/b12a57d3660ccc90270ae7f9
二.遍曆Recent中文件路徑
在遍曆Recent目錄時,遍曆方法參考了Level Up的文章"[C#][VB.NET].NET捷徑(ShortCut)控製"如下圖"dota2.txt"的捷徑(ShortCut),通過目標獲取Recent快捷鍵的原始存放路徑.
這裏Level Up作者整理了一個類,通過這個類實現獲取文件原始路徑,右鍵項目"添加"類,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; //Directory 目錄 using System.Reflection; //BindingFlags 枚舉 namespace GetPathRecent { public class RecentlyFileHelper { public static string GetShortcutTargetFile(string shortcutFilename) { var type = Type.GetTypeFromProgID("WScript.Shell"); //獲取WScript.Shell類型 object instance = Activator.CreateInstance(type); //創建該類型實例 var result = type.InvokeMember("CreateShortCut", BindingFlags.InvokeMethod, null, instance, new object[] { shortcutFilename }); var targetFile = result.GetType().InvokeMember("TargetPath", BindingFlags.GetProperty, null, result, null) as string; return targetFile; } public static IEnumerable<string> GetRecentlyFiles() { var recentFolder = Environment.GetFolderPath(Environment.SpecialFolder.Recent); //獲取Recent路徑 return from file in Directory.EnumerateFiles(recentFolder) where Path.GetExtension(file) == ".lnk" select GetShortcutTargetFile(file); } } }
三.顯示路徑listBox1控件中
向Form中添加控件listBox和fileSystemWatcher(監控文件係統更改通知,並在目錄或文件更改時引發事件).具體代碼如下:
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; namespace GetPathRecent { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //載入Form private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Clear(); foreach (var file in RecentlyFileHelper.GetRecentlyFiles()) { listBox1.Items.Add(file); } //獲取recent路徑 var recentFolder = Environment.GetFolderPath(Environment.SpecialFolder.Recent); fileSystemWatcher1.Path = recentFolder; fileSystemWatcher1.Created += new System.IO.FileSystemEventHandler(fileSystemWatcher1_Created); } //當在指定Path(即recent路徑)中創建文件和目錄時增加ShortCut private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e) { listBox1.Items.Add(RecentlyFileHelper.GetShortcutTargetFile(e.FullPath)); } } }
四.運行結果
顯示Recent中Windows最近瀏覽的文件及文件夾原始路徑運行結果如下:
其中與"一.Windows曆史記錄"中圖對應,亦可以發現dota2.txt是對應捷徑"G:\dota2\dota2.txt"證明了文章.到此,我們就獲取到了Windows的最近曆史記錄,要實現清除Recent的曆史記錄也非常容易,同時清除指定U盤中的文件記錄也可以實現.同樣如果想刪除Office最近曆史記錄路徑為"C:\Users\dell\AppData\Roaming\Microsoft\Office\Recent".如下圖所示:
五.總結及感謝
該文章主要是結合自己的畢業設計中U盤清除Windows曆史記錄、Office曆史記錄設計完成,同時查看了很多資料和書籍,其中給予我幫助最大的是level up的文章,由於這方麵的資料較少,所以彌足珍貴.同時聲明該文章的代碼主要參考了Level Up的博客https://www.dotblogs.com.tw/larrynung/archive/2012/09/27/75118.aspx
最後,希望文章對大家有所幫助,同時希望大家去關注上麵提到博主的文章,他寫了很多文章,都非常有用,無論是技術性還是理論性.如果該篇文章中有錯誤或不足之處,請大家海涵!
(By:Eastmount 2014-1-19 夜4點https://blog.csdn.net/eastmount)
最後更新:2017-04-03 12:54:38