在 C# 中禁用 Windows 回收站删除确认
Disable Windows Recycle Bin delete confirmation in C#
我正在创建一个小程序,它有一些功能可以让我的电脑“感觉更好”。
其中一项功能是清空我的回收站。
我为此使用了以下代码:
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;
}
所以在另一个 class 我正在使用这些功能。在我们开始删除它们之前,我首先检查回收站是否有任何项目。如果是,则删除它们。如果不是,那就什么都不做。
但是会发生以下情况:
如果我有几个项目要删除,假设是 4 个。在程序开始删除它们之前,会弹出一个 Windows 消息框,询问我是否确定要删除 4 个项目。这会导致在激活后应完全自动化的流程中进行一些用户交互。
我做了一些研究,但似乎只能在我自己的电脑上停用该确认消息。在回收站属性中。
我确实知道,例如 CCleaner 也会清空回收站,但不会弹出确认窗口。所以应该是可以的。
如何在代码中“跳过”这个确认步骤?我在清单中尝试了一些管理员权限,但没有用。
消息框示例如下:
如果不能跳过消息框,我想知道是否有自动回答问题的方法?如果是这样,我希望程序回答“是”。
因为如果用户按下“否”,SHEmptyRecycleBin 函数仍将 return 一个“成功”值,而项目不会被删除。所以我将不得不在空函数之后再次进行“计数”检查。
我忘记在函数调用中传递正确的标志。
我用这个调用函数:
SHEmptyRecycleBin(IntPtr.Zero, null, 0)
虽然应该是这样的:
SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION | RecycleFlags.SHERB_NOPROGRESSUI | RecycleFlags.SHERB_NOSOUND)
致谢 Cid,感谢他在评论中回答了我的问题。谢谢。
我正在创建一个小程序,它有一些功能可以让我的电脑“感觉更好”。 其中一项功能是清空我的回收站。
我为此使用了以下代码:
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;
}
所以在另一个 class 我正在使用这些功能。在我们开始删除它们之前,我首先检查回收站是否有任何项目。如果是,则删除它们。如果不是,那就什么都不做。
但是会发生以下情况: 如果我有几个项目要删除,假设是 4 个。在程序开始删除它们之前,会弹出一个 Windows 消息框,询问我是否确定要删除 4 个项目。这会导致在激活后应完全自动化的流程中进行一些用户交互。
我做了一些研究,但似乎只能在我自己的电脑上停用该确认消息。在回收站属性中。 我确实知道,例如 CCleaner 也会清空回收站,但不会弹出确认窗口。所以应该是可以的。
如何在代码中“跳过”这个确认步骤?我在清单中尝试了一些管理员权限,但没有用。
消息框示例如下:
如果不能跳过消息框,我想知道是否有自动回答问题的方法?如果是这样,我希望程序回答“是”。 因为如果用户按下“否”,SHEmptyRecycleBin 函数仍将 return 一个“成功”值,而项目不会被删除。所以我将不得不在空函数之后再次进行“计数”检查。
我忘记在函数调用中传递正确的标志。
我用这个调用函数:
SHEmptyRecycleBin(IntPtr.Zero, null, 0)
虽然应该是这样的:
SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION | RecycleFlags.SHERB_NOPROGRESSUI | RecycleFlags.SHERB_NOSOUND)
致谢 Cid,感谢他在评论中回答了我的问题。谢谢。