SHEmptyRecycleBin в VB6 ничего не делает - PullRequest
0 голосов
/ 07 января 2011

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

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, если это имеет значение.

** EDIT *** ** 1015 1016 *

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

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

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

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

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

1 Ответ

1 голос
/ 08 января 2011

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

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

...