VB6中的SHEmptyRecycleBin不';我什么也不做

VB6中的SHEmptyRecycleBin不';我什么也不做,vb6,recycle-bin,Vb6,Recycle Bin,我正试图清空回收站,这是释放硬盘空间过程的一部分。他就是我目前掌握的密码。在我班的第一名: Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long Private Declare Function SHUpdateRe

我正试图清空回收站,这是释放硬盘空间过程的一部分。他就是我目前掌握的密码。在我班的第一名:

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long
Private Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll" () As Long
然后在硬盘清理功能中:

SHEmptyRecycleBin(Empty, vbNullString, 0)
SHUpdateRecycleBinIcon
我也试过:

Dim lRetVal As Long
lRetVal = 0
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, 0)
但它返回零,表示成功。以前有没有人使用过这个函数,或者对它为什么不起作用有什么想法?如果有必要,此代码将从ActiveX dll中运行

**编辑**

嗯,我想我以前一定是误读或误解了什么,因为我认为无论我看了什么例子,给我的印象是,最后一个变量使用0不会调用确认窗口。我尝试了以下代码:

Const SHERB_NOCONFIRMATION = &H1
Call SHEmptyRecycleBin(0, vbNullString, SHERB_NOCONFIRMATION)
…但它仍然不起作用。但是,如果在调用ActiveX dll的.exe中使用此代码:

Const SHERB_NOCONFIRMATION = &H1
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, SHERB_NOCONFIRMATION)
…它起作用了。我不明白为什么它在.exe而不是.dll中工作,如果可能的话,我宁愿把所有代码都保存在.dll中。

你可以检查一下


基本上
SHEmptyRecycleBin 0,vbNullString,0
Call SHEmptyRecycleBin(0,vbNullString,0)
应该可以,但是他们正在传递一个实际的
hwnd
,以便函数UI用作所有者窗口。

我希望这个程序仅供您自己使用。对于一个程序来说,从用户手中夺走这样的控制权是不好的。我保持我的回收站干净,但很多用户依赖于“挂在那里”的东西,以防他们改变对删除操作的想法-这就是我们有一个回收站的全部原因。然而,它似乎在这里从一个主程序工作。请注意,hWnd参数的“Empty”可以工作,但显式0可能是更好的选择。我得到了提示对话框,但是没有任何东西告诉用户他们被要求确定清空回收站。有几点。我用它来清理一个只由管理员使用的服务器,而不是实际用户。我知道问题出在哪里了。这是作为一个计划任务运行的,在一个在后台做事情的用户帐户下,因此确认窗口(我没有意识到存在)不会出现。我假定呼叫将以cancel终止,因此返回0,因为它已取消OK。我想我需要找出是否可以通过编程方式确认删除。