在 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,感谢他在评论中回答了我的问题。谢谢。