SHEmptyRecycleBin в VB6 ничего не делает

Я пытаюсь очистить корзину как часть процесса освобождения места на жестком диске. Он код, который у меня есть до сих пор. В верхней части моего класса:

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)

Но он возвращает ноль, что указывает на успех. Кто-нибудь когда-нибудь использовал эту функцию раньше или есть идеи, почему она не работает? Этот код запускается из DLL ActiveX, если это имеет значение.

**ИЗМЕНИТЬ**

Ну, я думаю, что я, должно быть, неправильно прочитал или неправильно понял что-то раньше, потому что я думаю, что какие бы примеры я ни смотрел, у меня сложилось впечатление, что окно подтверждения не будет вызвано с использованием 0 для последней переменной. Я пробовал этот код:

Const SHERB_NOCONFIRMATION = &H1
Call SHEmptyRecycleBin(0, vbNullString, SHERB_NOCONFIRMATION)

... и это все еще не работает. Однако, если я использую этот код в .exe, который вызывает dll ActiveX:

Const SHERB_NOCONFIRMATION = &H1
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, SHERB_NOCONFIRMATION)

...оно работает. Я не могу понять, почему это работает в .exe, а не в .dll, и я бы предпочел сохранить весь код в .dll, если это возможно.


person Joe M    schedule 07.01.2011    source источник
comment
Я надеюсь, что эта программа предназначена только для вашего собственного использования. Нехорошо, если программа перехватывает контроль над чем-то подобным у пользователя. Я держу свою корзину в чистоте, но многие пользователи полагаются на вещи, висящие там, на случай, если они передумают об операции удаления — единственная причина, по которой у нас есть корзина.   -  person Bob77    schedule 07.01.2011
comment
Однако, похоже, он работает здесь из основной программы. Обратите внимание, что Empty для параметра hWnd работает, но явный 0, вероятно, является лучшим выбором. Я получаю диалоговое окно с подсказкой, хотя ничто там не говорит пользователю, что его просят подтвердить очистку корзины.   -  person Bob77    schedule 07.01.2011
comment
Несколько моментов. Я использую это для очистки сервера, который используется только администраторами, а не реальными пользователями. Я понял, в чем проблема. Это выполняется как запланированное задание под учетной записью пользователя, которая делает что-то в фоновом режиме, поэтому окно подтверждения (которое я не осознавал) не отображается. Я предполагаю, что вызов завершается отменой и, таким образом, возвращает 0, потому что он отменился нормально. Думаю, мне нужно выяснить, могу ли я программно подтвердить удаление.   -  person Joe M    schedule 10.01.2011


Ответы (1)


Вы можете проверить этот образец.

В основном SHEmptyRecycleBin 0, vbNullString, 0 или Call SHEmptyRecycleBin(0, vbNullString, 0) должны быть в порядке, но они передают фактическое hwnd для пользовательского интерфейса функции, чтобы использовать его в качестве окна владельца.

person wqw    schedule 08.01.2011