【发布时间】: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