返回顶部
首页 > 资讯 > 精选 >C#编程如何删除系统自带游戏
  • 100
分享到

C#编程如何删除系统自带游戏

2023-06-17 14:06:25 100人浏览 泡泡鱼
摘要

本篇内容介绍了“C#编程如何删除系统自带游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、界面设计新建windows应用程序,在出现的f

本篇内容介绍了“C#编程如何删除系统自带游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、界面设计

新建windows应用程序,在出现的fORM中添加TreeView、ListView和Button控件各一个,调整到适当的大小,改变button1的text为“删除系统自带程序”,将listview1的view项设置为detail,其余不变。添加三个imagelist控件,分别改名为TreeImageList、TreeViewImageList和ListViewImageList,用于存放引用自系统shell32.dll中的图标。

二、显示DllCache目录及其下面的文件

添加使用命名空间和文件结构信息

using System.io;   using System.Runtime.InteropServices;   using System.Reflection;

添加文件结构信息,调用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;   }

在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);

在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);   }   }

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();

四、两个自定义函数

判断文件是否在指定的文件夹中

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;   }

删除目录及目录下所有文件与子目录

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()); }   }

“C#编程如何删除系统自带游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C#编程如何删除系统自带游戏

本文链接: https://lsjlt.com/news/289413.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#编程如何删除系统自带游戏
    本篇内容介绍了“C#编程如何删除系统自带游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、界面设计新建Windows应用程序,在出现的f...
    99+
    2023-06-17
  • win10系统自带的输入法如何删除
    这篇文章主要讲解了“win10系统自带的输入法如何删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10系统自带的输入法如何删除”吧!一、win10输...
    99+
    2022-12-08
    win10
  • 如何删除XP系统附件中的游戏组件
    本篇内容介绍了“如何删除XP系统附件中的游戏组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!答:解决该问题的具体操作步骤如下:首先要去除相...
    99+
    2023-06-14
  • win11系统有自带的小游戏吗
    今天小编给大家分享一下win11系统有自带的小游戏吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。win11系统有自带的小游...
    99+
    2023-06-30
  • win7系统自带的输入法占系统空间如何删除
    大家都知道,我们安装的win7系统里面都会自带有输入法,但是不少用户发现系统自带的输入法自己在日常生活中是不经常使用的,而且这样还会占据系统空间,所以就想问说周末将win7自带输入法给删除掉,那该如何操作呢?现在小编就跟...
    99+
    2023-06-05
    win7 自带输入法 自带 系统 输入法 空间
  • Linux删除系统自带版本Python过程详解
    巨坑,切忌不要轻易删除Linux系统自带版本的Python 1.卸载python(防止未卸载干净) rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps #...
    99+
    2022-06-03
    Linux 删除 系统自带 Python
  • win10自带游戏如何打开
    这篇文章主要讲解了“win10自带游戏如何打开”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10自带游戏如何打开”吧!win10自带游戏打开方法点击左下角的windows图标或者搜索按...
    99+
    2023-07-01
  • 如何删除ubuntu自带的php
    本篇内容主要讲解“如何删除ubuntu自带的php”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何删除ubuntu自带的php”吧!删除ubuntu自带的php的方法:1、通过“sudo ap...
    99+
    2023-06-20
  • 如何快速找回Win7系统自带小游戏的方法介绍
    Win7系统自带的许多小游戏深得用户们的喜爱,比如扫雷、纸牌、空档接龙等等,空闲时间直接从Windows系统中调出小游戏,既可以放松心情又能锻炼脑筋。但是有些朋友打开Win7开始菜单中的“游戏”选...
    99+
    2023-05-31
    Win7系统 游戏 小游戏 Win7 系统 自带 方法
  • Win10系统如何取消自动安装游戏
    小编给大家分享一下Win10系统如何取消自动安装游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法/步骤:在键盘上按下“win+R”调出运行窗口,随后输入“r...
    99+
    2023-06-27
  • 怎么在deepin系统中删除自带的图片
    这篇文章将为大家详细讲解有关怎么在deepin系统中删除自带的图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先一步到dock文件管理器上,如下。点击文件管理器图片,如下。在图片文件夹,右...
    99+
    2023-06-13
  • win8.1系统自带的微软拼音输入法如何删除卸载
    Win8.1操作系统默认随机安装微软拼音输入法,中文及英文都是通过微软拼音输入法使用,所以无法彻底该程序,只可在任务栏中删除该选项。那么win8.1系统自带的微软拼音输入法如何删除卸载,下面小编将为大家详细介绍,希望对大...
    99+
    2023-06-06
    win8.1系统自带的微软拼音输入法 系统 自带 微软拼音 win8.1
  • Win7如何启动自带游戏默认游戏项是关闭的
      电脑刚换上Win 7系统的用户,发现一些系统自带的游戏不见了,又不知道要在哪里找,其实Win 7默认游戏项是关闭的。那么到底Win7自带游戏在哪呢?要怎么启动呢?以下就是启动游戏的方法   1、打开“开始...
    99+
    2023-06-16
    Win7 自带游戏 自带 游戏
  • win10找不到自带游戏如何解决
    这篇文章主要介绍“win10找不到自带游戏如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10找不到自带游戏如何解决”文章能帮助大家解决问题。 ...
    99+
    2023-02-22
    win10
  • WIN7系统如何删除卸载程序(添加和删除程序)
     今天有网友问WIN7系统中如何删除程序?确实在win7中不再像xp系统中那样习惯,其实win7比xp系统就是多了一个步骤,改了个名字,慢慢习惯就好了,新手学win7比老手更方便,这里我们小编特为大家分享下。 ...
    99+
    2023-06-07
    删除 卸载 添加和删除 添加 程序 系统 WIN7
  • win10自带游戏被隐藏了如何解决
    如果您的Windows 10自带游戏被隐藏了,您可以通过以下方法解决:1. 使用Windows设置来重新安装游戏:打开Windows...
    99+
    2023-09-12
    win10
  • Win11系统自带输入法怎么卸载?Win11自带输入法删除方法
      Win11系统自带输入法怎么卸载?Win11系统安装好之后里面有一个自带的微软输入法,因为很多用户在安装好了系统之后都会去安装第三方的输入法来使用。所以想要去卸载自带的输入法。那么自带的输入法如何去进行卸载呢?一起来...
    99+
    2023-05-19
    Win11卸载 Win11自带输入法
  • Win10预览版怎么删除系统自带的输入法?
    在win10的使用中如果想要更换系统自动的输入法,使用诸如:搜狗输入法或者QQ拼音输入法,又或者使用五笔输入法,那么系统残留的输入法会影响输入法的切换,删除自带输入法能够改善这种体验。 方法一:系统功能 1、点击右下角的...
    99+
    2023-06-11
    Win10 输入法 删除 系统 预览 自带
  • win10自带NET无法删除如何解决
    要删除Windows 10自带的.NET框架,可以按照以下步骤进行操作:1. 打开控制面板:可以在开始菜单中搜索“控制面板”,然后点...
    99+
    2023-09-09
    win10
  • win10自带七个文件夹如何删除
    这篇文章主要介绍“win10自带七个文件夹如何删除”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10自带七个文件夹如何删除”文章能帮助大家解决问题。win10自带七个文件夹去掉的方法:打开“资...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作