【问题标题】:Disable Windows Recycle Bin delete confirmation in C#在 C# 中禁用 Windows 回收站删除确认
【发布时间】:2020-08-23 21:42:28
【问题描述】:

我正在创建一个小程序,它有一些功能可以让我的电脑“感觉更好”。 其中一项功能是清空我的回收站。

我为此使用以下代码:

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()的代码
  • 这是一个简单的公共函数。它已添加到代码中。 “公共布尔空()”。
  • 你已经承诺传递标志 SHERB_NOCONFIRMATION 那里 SHEmptyRecycleBin(IntPtr.Zero, null, 0)
  • 我从未使用过这个 DLL,所以我不能 100% 确定,因此是评论而不是答案。但是,the docs 似乎很清楚
  • 试试SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION)

标签: c# windows recycle-bin shell32


【解决方案1】:

我忘记在函数调用中传递正确的标志。

我用这个调用了这个函数:

SHEmptyRecycleBin(IntPtr.Zero, null, 0)

虽然应该是这样的:

SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION | RecycleFlags.SHERB_NOPROGRESSUI | RecycleFlags.SHERB_NOSOUND)

感谢 Cid 在 cmets 中回答我的问题。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多