如果可能的话,我希望能够检查回收站是否为空,只需要轻微的麻烦(导入dll,导入任何内容,创建整个新类来保存回收站功能等等)。
我已经在网上找到了以下代码来清空回收站,所以我很自然地怀疑我应该能够扩展它以检查它是否需要先清空,也许是Shell32.dll中的另一个函数。
enum BinFlags : uint
{
SHERB_NOCONFIRMATION = 0x00000001,
SHERB_NOPROGRESSUI = 0x00000002,
SHERB_NOSOUND = 0x00000004
}
[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string rootPath,
BinFlags flags);
/* snip, bunch of code... */
SHEmptyRecycleBin(IntPtr.Zero, null, 0);
答案 0 :(得分:3)
您可以添加对C:\Windows\System32\Shell32.dll
的引用,并使用以下代码段:
Shell shell = new Shell();
Folder recycleBin = shell.NameSpace(10);
int itemsCount = recycleBin.Items().Count;
取自here。
答案 1 :(得分:1)
文档很差,但您可能需要SHQueryRecycleBin
编辑:在MSDN处提供更好的文档。
[DllImport("shell32.dll")]
static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO
pSHQueryRBInfo);
[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct SHQUERYRBINFO
{
public int cbSize;
public long i64Size;
public long i64NumItems;
}
看起来你打电话并填充对象,如果你看i64NumItems
它是0然后回收站是空的。
public static int GetCount()
{
SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();
sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);
return (int)sqrbi.i64NumItems;
}