微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#中禁用Windows回收站删除确认

如何解决在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也会清空回收站,而不会弹出确认窗口。因此应该有可能。

如何在代码中“跳过”此确认步骤?我已经尝试了清单中的一些管理员权限,但是没有用。

以下是消息框的示例:

enter image description here

如果不选择跳过消息框,我想知道是否可以自动回答问题?如果是这样,我希望程序回答“是”。 因为如果用户按下“否​​”,则SHEmptyRecycleBin函数仍将返回“成功”值,而不会删除这些项目。因此,在清空函数之后,我将不得不再次进行“计数”检查。

解决方法

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

我用这个调用了函数:

SHEmptyRecycleBin(IntPtr.Zero,null,0)

应该是这样的:

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

感谢Cid,以在评论中回答我的问题。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。