熱烈祝賀臺州維博網絡的站長論壇隆重上線!(2012-05-28)    熱烈慶祝偉大的祖國60周年生日 點擊進來我們一起為她祝福吧(2009-09-26)    站長論壇禁止發布廣告,一經發現立即刪除。謝謝各位合作!.(2009-08-08)    熱烈祝賀臺州網址導航全面升級,全新版本上線!希望各位一如既往地支持臺州網址導航的發展.(2009-03-28)    臺州站長論壇恭祝各位新年快樂,牛年行大運!(2009-01-24)    臺州Link正式更名為臺州網址導航,專業做以臺州網址為主的網址導航!(2008-05-23)    熱烈祝賀臺州Link資訊改名為中國站長資訊!希望在以后日子里得到大家的大力支持和幫助!(2008-04-10)    熱烈祝賀臺州Link論壇改名為臺州站長論壇!希望大家繼續支持和鼓勵!(2008-04-10)    臺州站長論壇原[社會瑣碎]版塊更名為[生活百科]版塊!(2007-09-05)    特此通知:新臺州站長論壇的數據信息全部升級成功!">特此通知:新臺州站長論壇的數據信息全部升級成功!(2007-09-01)    臺州站長論壇對未通過驗證的會員進行合理的清除,請您諒解(2007-08-30)    臺州網址導航|上網導航誠邀世界各地的網站友情鏈接和友誼聯盟,共同引領網站導航、前進!(2007-08-30)    禁止發廣告之類的帖,已發現立即刪除!(2007-08-30)    希望各位上傳與下載有用資源和最新信息(2007-08-30)    熱烈祝賀臺州站長論壇全面升級成功,全新上線!(2007-08-30)    
便民網址導航,輕松網上沖浪。
臺州維博網絡專業開發網站門戶平臺系統
您當前的位置: 首頁 » ASP/ASP.NET編程 » C#編程刪除系統自帶游戲

C#編程刪除系統自帶游戲

論壇鏈接
  • C#編程刪除系統自帶游戲
  • 發布時間:2011-05-04 15:48:24    瀏覽數:5748    發布者:abcdef133    設置字體【   
自從Windows 2000采用了動態緩存目錄的保護措施以來,通常用原來的方法在刪除系統自帶游戲幾秒后,游戲又可以使用了。本文介紹了在Visual Studio 2005環境下進行C#編程,來實現顯示DllCache目錄下的文件,并刪除Windows 2000 pro系統自帶的四個游戲。

一、界面設計

新建Windows應用程序,在出現的form中添加TreeView、ListView和Button控件各一個,調整到適當的大小,改變button1的text為“刪除系統自帶程序”,將listview1的view項設置為detail,其余不變。添加三個imagelist控件,分別改名為TreeImageList、TreeViewImageList和ListViewImageList,用于存放引用自系統shell32.dll中的圖標。

二、顯示DllCache目錄及其下面的文件

1.添加使用命名空間和文件結構信息


using System.IO;
using System.Runtime.InteropServices;
using System.Reflection;



2.添加文件結構信息,調用Windows API中的提取圖標函數和獲取系統路徑函數,并構造自定義的提取圖標函數。


[StructLayout(LayoutKind.Sequential)] 0
public struct SHFILEINFO
{ public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
public char szDisplayName;
public char szTypeName; }
private System.Windows.Forms.ImageList TreeImageList;
//獲取圖標
[DllImport("Shell32.dll")]
public static extern int ExtractIcon(IntPtr h, string strx, int ii);
// 獲取系統路徑
[DllImport("Kernel32.dll" ,CharSet = CharSet.Auto)]
public static extern Int32 GetSystemDirectory(StringBuilder WinDir, Int32 usize);
//構造自定義提取圖標函數
protected virtual Icon myExtractIcon(string FileName, int iIndex)
{ try
{ IntPtr hIcon = (IntPtr) ExtractIcon(this.Handle, FileName, iIndex);
if (!hIcon.Equals(null))
{ Icon icon = Icon.FromHandle(hIcon);
return icon; }
}
catch (Exception ex)
{ MessageBox.Show(ex.Message, "錯誤提示", 0, MessageBoxIcon.Error); }
return null;
}



3.在Form構造函數中添加獲取圖標信息,圖標取自shell32.dll。


Icon ic0 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 15);
TreeImageList.Images.Add(ic0);
Icon ic1 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 5);
TreeImageList.Images.Add(ic1);
Icon ic2 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 7);
TreeImageList.Images.Add(ic2);
Icon ic3 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 11);
TreeImageList.Images.Add(ic3);
Icon ic4 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 3);
TreeImageList.Images.Add(ic4);
Icon ic5 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 4);
TreeImageList.Images.Add(ic5);
Icon ic6 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 101);
TreeImageList.Images.Add(ic6);
Icon ic7 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 51);



4.在TreeView1中顯示當前系統盤符和文件目錄樹

(1) 聲明公共變量。


public const int nChars = 128;
public StringBuilder Buff = new StringBuilder(nChars);



(2) 在Form構造函數中添加下列語句,用于添加根節點。


GetSystemDirectory(Buff, nChars);
Buff.Remove(3, Buff.Length - 3);
TreeNode RootNode = new TreeNode(Buff.ToString(), 0, 0);
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
treeView1.Nodes.Add(RootNode);
treeView1.ImageList = TreeImageList;
treeView1.EndUpdate();



(3) 選中在TreeView1的某一節點后,執行AfterSelect事件中的語句,要求能夠實現打開此目錄的下級目錄,并將下級目錄添加入TreeView1中。


private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{ AddDirectories(e.Node); }//e.Node為當前打開的節點
void AddDirectories(TreeNode tn)
{
tn.Nodes.Clear();
string strPath = tn.FullPath;
DirectoryInfo dirinfo = new DirectoryInfo(strPath); //獲得當前目錄
DirectoryInfo[] adirinfo;
try{ adirinfo = dirinfo.GetDirectories(); }
catch { return; }
int iImageIndex = 4; int iSelectedIndex = 5;
foreach (DirectoryInfo di in adirinfo)
{
if (di.Name == "RECYCLER" || di.Name == "RECYCLED" || di.Name == "Recycled")
{ iImageIndex = 6; iSelectedIndex = 6; }
else
{ iImageIndex = 4; iSelectedIndex = 5; }
TreeNode tnDir = new TreeNode(di.Name, iImageIndex, iSelectedIndex);
tn.Nodes.Add(tnDir);
}
}



5.LiseView中顯示當前目錄(選中的節點)下的文件和下級目錄。

(1)添加公共變量。


public string strFilePath = "";



(2)構造自定義函數,用于顯示文件的圖標。


protected virtual void SetIcon(ImageList imageList, string FileName, bool tf)
{ SHFILEINFO fi = new SHFILEINFO();
if (tf == true)
{ int iTotal = (int)SHGetFileInfo(FileName, 0, ref fi, 100, 16640);
try
{ if (iTotal > 0)
{ Icon ic = Icon.FromHandle(fi.hIcon); //提取文件自帶的小圖標
imageList.Images.Add(ic); }
}
catch (Exception ex)
{ MessageBox.Show(ex.Message, "錯誤提示", 0, MessageBoxIcon.Error); }
}
else
{ int iTotal = (int)SHGetFileInfo(FileName, 0, ref fi, 100, 257);
try
{ if (iTotal > 0)
{ Icon ic = Icon.FromHandle(fi.hIcon);
imageList.Images.Add(ic); }
}
catch (Exception ex)
{ MessageBox.Show(ex.Message, "錯誤提示", 0, MessageBoxIcon.Error);
}
}
}



(3) 構造自定義函數,用于顯示選中的基本節點下的文件和下級目錄。


protected virtual void InitList(TreeNode tn)
{ this.Cursor = Cursors.WaitCursor;
this.ListViewImageList.Images.Clear();
listView1.SmallImageList = this.ListViewImageList;
Icon ic0 = myExtractIcon("%SystemRoot%\\system32\\shell32.dll", 3);
this.ListViewImageList.Images.Add(ic0);
listView1.Clear();
//設置列表框的表頭
listView1.Columns.Add("文件(夾)名", 160, HorizontalAlignment.Left);
listView1.Columns.Add("擴展名", 100, HorizontalAlignment.Center);
listView1.Columns.Add("文件大小", 120, HorizontalAlignment.Left);
listView1.Columns.Add("創建時間", 120, HorizontalAlignment.Left);
listView1.Columns.Add("訪問時間", 200, HorizontalAlignment.Left);
listView1.Columns.Add("上級文件夾", 400, HorizontalAlignment.Left);
string strPath = tn.FullPath;
//獲得當前目錄下的所有文件
DirectoryInfo curDir = new DirectoryInfo(strPath);//創建目錄對象。
FileInfo[] dirFiles;
try { dirFiles = curDir.GetFiles(); }
catch { return; }
string[] arrSubItem = new string[10];
//文件的創建時間和訪問時間。
int iCount = 0;
int iconIndex = 1;//用1,而不用0是要讓過0號圖標。
foreach (FileInfo fileInfo in dirFiles)
{ string strFileName = fileInfo.Name;
//如果不是文件pagefile.sys
if (!strFileName.Equals("pagefile.sys"))
{ arrSubItem[0] = strFileName;
if (fileInfo.Extension.Trim() == "")
arrSubItem[1] = "未知類型";
else
arrSubItem[1] = fileInfo.Extension.ToString();
arrSubItem[2] = fileInfo.Length + "字節";
arrSubItem[3] = fileInfo.CreationTime.ToString();
arrSubItem[4] = fileInfo.LastAccessTime.ToString();
arrSubItem[5] = fileInfo.Directory.ToString(); }
else
{ arrSubItem[1] = "未知擴展名";
arrSubItem[2] = "未知大小";
arrSubItem[3] = "未知日期";
arrSubItem[4] = "未知日期";
arrSubItem[5] = "未知上級文件夾"; }
//得到每個文件的圖標
string str = fileInfo.FullName;
try { SetIcon(this.ListViewImageList, str, true); }
catch (Exception ex)
{ MessageBox.Show(ex.Message, "錯誤提示", 0, MessageBoxIcon.Error); }
//插入列表項
ListViewItem LiItem = new ListViewItem(arrSubItem, iconIndex);
listView1.Items.Insert(iCount, LiItem);
iCount++;
iconIndex++;
}
strFilePath = strPath;
this.Cursor = Cursors.Arrow;
//以下是向列表框中插入目錄,不是文件。獲得當前目錄下的各個子目錄。
int iItem = 0;
DirectoryInfo Dir = new DirectoryInfo(strPath);
string[] arrDirectorySubItem = new string[10];
foreach (DirectoryInfo di in Dir.GetDirectories())
{ arrDirectorySubItem[0] = di.Name;
if (di.Extension.Trim() != "")
arrDirectorySubItem[1] = di.Extension;
else
{ arrDirectorySubItem[1] = "
";
arrDirectorySubItem[2] = "";
arrDirectorySubItem[3] = "";
arrDirectorySubItem[4] = "";
arrDirectorySubItem[5] = ""; }
ListViewItem LiItem = new ListViewItem(arrDirectorySubItem, 0);
listView1.Items.Insert(iItem, LiItem);
iItem++;
}
}



(4) 在構造自定treeView1_AfterSelect中的“AddDirectories(e.Node);”語句后添加下語句。


InitList(e.Node);
      三、刪除系統自帶的四個游戲程序

(1)自定義函數,用于刪除Windows2000的四個系統自帶游戲


private void DelSystemFourGames()
{ string str="";
StringBuilder buff1 = new StringBuilder(nChars);
StringBuilder buff2 = new StringBuilder(nChars);
GetSystemDirectory(Buff, nChars);
Buff.Append("\\");
GetSystemDirectory(buff1, nChars);
buff1.Append("\\");
buff2=buff1;
str="sol.exe";
if(File_in_Directory(str, buff1.ToString()))
{ Buff.Append("sol.exe");//紙牌
buff2.Append("DllCache\\");
buff2.Append("sol.exe");
//執行刪除文件,刪除后的文件不出現在回收站中
File.Delete(Buff.ToString());
File.Delete(buff2.ToString());
Buff.Remove(Buff.Length - 7, 7);
//還原Buff的字符為system32\目錄下,7是“sol.exe”的長度
buff2.Remove(buff2.Length - 7, 7);//類上,還原為dllcache\目錄下
}
……
//省略了刪除“空當接龍”和“掃雷”兩個游戲的程序段因其內容同上,只不過改str = "freecell.exe"
//和str = "winmine.exe",以及Buff.Remove中的數字長度與相應的文件名長度一致。
// 刪除windows XP中的蜘蛛“spider.exe”與上類同
GetSystemDirectory(Buff, nChars);
GetSystemDirectory(buff2, nChars);
buff2.Append("\\");
Buff.Remove(3, Buff.Length - 3); //反回到“盤符:\”狀態
Buff.Append("Program Files\\WIndows NT\\Pinball");//桌上彈球
str = "pinball.exe";
if (File_in_Directory(str, Buff.ToString()))
{ DeleteDir(Buff.ToString());//刪除目錄
buff2.Append("DllCache\\");
buff2.Append("pinball.exe");
File.Delete(buff2.ToString());
}
}



(2)在button1_OnClick中調用自定義刪除函數


DelSystemFourGames();



四、兩個自定義函數

1.判斷文件是否在指定的文件夾中


private bool File_in_Directory(string str1, string str2)
{
DirectoryInfo curDir = new DirectoryInfo(str2);//創建目錄對象。
FileInfo[] dirFiles;
try
{ dirFiles = curDir.GetFiles(); }
catch
{ return false; }
foreach (FileInfo fileInfo in dirFiles)
{ if (fileInfo.Name == str1) return true; }
return false;
}



2.刪除目錄及目錄下所有文件與子目錄


public static void DeleteDir(string Path)
{ try
{ // 檢查路徑名是否以分割字符結束,如果不是則添加”\”分隔符
if (Path[Path.Length - 1] != Path.DirectorySeparatorChar)
Path += Path.DirectorySeparatorChar;
string[] fileList = Directory.GetFileSystemEntries(Path);
// 遍歷所有的文件和目錄
foreach (string file in fileList)
{
// 先將文件當作目錄處理如果存在這個目錄就遞歸Delete該目錄下面的文件
if (Directory.Exists(file))
{
DeleteDir(Path + Path.GetFileName(file));
}
else // 否則直接Delete文件
{ //改變文件的只讀屬性
FileInfo fi = new FileInfo(file);
if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
fi.Attributes = FileAttributes.Normal;
File.Delete(Path + Path.GetFileName(file)); //刪除文件
}
}
System.IO.Directory.Delete(Path, true); //刪除文件夾
}
catch (Exception e)
{ MessageBox.Show(e.ToString()); }
}



附言:本文程序采用的是Visual Studio 2005 C#編寫,所述代碼均已在Windows 2000 pro/server中運行通過。

本文通過C#編程實現了刪除Windows 2000系統自帶游戲這個目標,并將微軟為考慮自身安全的dllcache目錄及其中的文件顯示出來,希望能夠對要了解這方面的相關人員有所幫助。
娛樂休閑專區A 影視預告B 音樂咖啡C 英語階梯D 生活百科
網頁編程專區E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技術區 N 系統管理O 服務器架設P 網絡/硬件Q 編程序開發R 內核/嵌入
管理中心專區S 發布網址T 版主議事U 事務處理
陕西快乐10分玩法 广东11选5预测杀号专家推荐 可以自己开通创业板吗 黑龙江11选5一定牛走势图 急速赛车全天计划数据 青海11选五跨度走势图 江西多乐彩技巧 一分快3和值技巧100准 哪些股票指数可以交易 博彩公司 安徽快三软件官网下载