如何解决在C#中禁用Windows回收站删除确认
我正在创建一个具有一些功能的小程序,以使我的PC“感觉更好”。 这些功能之一是清空我的回收站。
我为此使用了以下代码:
enum RecycleFlags : uint
{
SHERB_NOCONFIRMATION = 0x00000001,// No empty confirmation
SHERB_nopROGRESSUI = 0x00000002,// No progress tracking
SHERB_NOSOUND = 0x00000004 // No sound on completion
}
[DllImport("Shell32.dll",CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd,string pszRootPath,RecycleFlags dwFlags);
private bool IsEmpty()
{
Shell shell = new Shell();
Folder recycleBin = shell.NameSpace(10);
if (recycleBin.Items().Count == 0)
{
return true;
}
return false;
}
public bool Empty()
{
if (IsEmpty() || SHEmptyRecycleBin(IntPtr.Zero,null,0) == 0)
{
return true;
}
return false;
}
因此在另一堂课中,我正在使用这些功能。我首先检查回收站中是否有任何物品,然后再开始删除它们。如果是,则将其删除。如果没有,那么什么也不要做。
但是,发生以下情况: 如果我有几个要删除的项目,例如4。在程序开始删除它们之前,会弹出一个Windows消息框,询问我是否确定要删除4个项目。这会导致用户在激活过程中应完全自动化的过程中进行一些交互。
我已经做过一些研究,但是看来我只能在自己的电脑上停用该确认消息。在回收站属性内。 我确实知道,例如ccleaner也会清空回收站,而不会弹出确认窗口。因此应该有可能。
如何在代码中“跳过”此确认步骤?我已经尝试了清单中的一些管理员权限,但是没有用。
如果不选择跳过消息框,我想知道是否可以自动回答问题?如果是这样,我希望程序回答“是”。 因为如果用户按下“否”,则SHEmptyRecycleBin函数仍将返回“成功”值,而不会删除这些项目。因此,在清空函数之后,我将不得不再次进行“计数”检查。
解决方法
我忘记在函数调用中传递正确的标志。
我用这个调用了函数:
SHEmptyRecycleBin(IntPtr.Zero,null,0)
应该是这样的:
SHEmptyRecycleBin(IntPtr.Zero,RecycleFlags.SHERB_NOCONFIRMATION | RecycleFlags.SHERB_NOPROGRESSUI | RecycleFlags.SHERB_NOSOUND)
感谢Cid,以在评论中回答我的问题。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。