C# 系统应用之清空回收站操作

简介:

由于毕业设计项目是基于U盘防御的软件,所以涉及些系统应用的知识.本文主要讲述的是如何通过C#代码实现清空回收站的资源.主要通过SHEmptyRecycleBin函数实现.

一.SHEmptyRecycleBin函数

SHEmptyRecycleBin函数功能是清空指定驱动的回收站.函数如下:

HRESULT SHEmptyRecycleBin(
HWND hwnd,                    //父窗口句柄
LPCTSTR pszRootPath,          //将要清空的回收站的地址
DWORD dwFlags                 //用于清空回收站的功能参数
);

该函数在shell32.dll下,其中LPCTSTR pszRootPath指向要清空的回收站的地址,如果为空时,则清空所有驱动器上的回收站.dwFlags参数可以有三个不同的值,可为一个或多个组合,用以设定是否要弹出系统对话框、是否显示删除进度条的UI和当删除完成时,是否播放声音.

const int SHERB_NOCONFIRMATION = 0x000001;   //不显示确认删除的对话框
const int SHERB_NOPROGRESSUI = 0x000002;     //不显示删除过程的进度条
const int SHERB_NOSOUND = 0x000004;          //当删除完成时,不播放声音

清空回收站中的文件的SHEmptyRecycleBin是一个内核API方法,该方法在C#中需要手动的引入方法所在的类库.同时因为调用了Windows API,所以要添加对System.Runtime.IneropServices命名空间的引用;该方法在C#中的声明语法如下:

DllImportAttribute("shell32.dll")]         //声明API函数
private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);

二.源代码

程序代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ClearRecycle
{
    public partial class Form1 : Form
    {
        const int SHERB_NOCONFIRMATION = 0x000001;   //不显示确认删除的对话框
        const int SHERB_NOPROGRESSUI = 0x000002;     //不显示删除过程的进度条
        const int SHERB_NOSOUND = 0x000004;          //当删除完成时,不播放声音

        public Form1()
        {
            InitializeComponent();
        }

        [DllImportAttribute("shell32.dll")]          //声明API函数
        private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);

        //点击"清空回收站"按钮
        private void button1_Click(object sender, EventArgs e)
        {
            SHEmptyRecycleBin(this.Handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND);
        }      
    }
}

代码中dwFlags值为“SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND”表示删除时不显示确认删除对话框,不显示删除过程的进度条,同时不播放声音.如果不指定预设状态,为0时会弹出系统的对话框和声音.

三.运行结果

如果SHEmptyRecycleBin(this.Handle,"",0);时提示如下确认删除对话框,如果项目过多时会显示删除的进度条.

如果删除文件时,没有显示声音,可以通过控制面板上面修改.如下图所示:

该文章主要是结合自己的毕业设计部分,同时查看相应书籍和参考下面几位博主完成.是一篇基础性应用文章,希望大家关注level up的文章,他的文章真心有用,似乎是台湾的一位智者.也将是我将来学习的主要对象.非常感谢他带来这么有用的系列文章.http://www.dotblogs.com.tw/larrynung/archive/2012/09/26/75065.aspx
最后希望该文章对大家有所帮助,如果有不足或错误的地方见谅!由于参考的令几篇文章都是转载,没有找到原作者,但同样感谢!
(By:Eastmount 2014-1-17 晚9点http://blog.csdn.net/eastmount)

目录
相关文章
|
20天前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
2月前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
122 3
|
2月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
43 3
|
2月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
75 1
|
3月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
96 2
|
2月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
26 0
|
4月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
74 2
|
3月前
|
消息中间件 网络协议 安全
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
201 0
|
3月前
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
98 0
|
3月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
56 0