2011-01-07 14 views
0

Ich versuche, den Papierkorb als Teil eines Prozesses zu leeren, der Festplattenspeicher freigibt. Er ist der Code, den ich bis jetzt habe. An der Spitze meiner Klasse:SHEMPTYRecycleBin in VB6 tut nichts

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 

Dann auf der Festplatte aufzuräumen Funktion:

SHEmptyRecycleBin(Empty, vbNullString, 0) 
SHUpdateRecycleBinIcon 

Ich habe auch versucht diese:

Dim lRetVal As Long 
lRetVal = 0 
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, 0) 

Aber es ist eine Null zurückkehrt, zeigt Erfolg . Hat jemand diese Funktion schon einmal benutzt oder hat er Ideen, warum das nicht funktionieren würde? Dieser Code wird innerhalb einer ActiveX-DLL ausgeführt, wenn dies wichtig ist.

** EDIT **

Nun, ich glaube, ich must've vor etwas falsch verstanden oder falsch verstanden, weil ich denke, was Beispiele, die ich bei mir den Eindruck, sah das Bestätigungsfenster nicht aufgerufen werden mit 0 für die letzte Variable. Ich habe diesen Code versucht:

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

... und es funktioniert immer noch nicht. Allerdings, wenn ich diesen Code in der Exe verwenden, die das ActiveX-DLL ruft:

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

... es funktioniert. Ich kann nicht herausfinden, warum es in der .exe und nicht in der DLL funktioniert, und ich würde lieber den ganzen Code in der .dll behalten, wenn möglich.

+2

Ich hoffe, dieses Programm ist nur für Ihren eigenen Gebrauch. Es ist nicht gut für ein Programm, die Kontrolle über etwas wie diese weg vom Benutzer zu übernehmen. Ich behalte meinen Papierkorb sauber, aber viele Benutzer verlassen sich darauf, dass Dinge "hängen bleiben", falls sie ihre Meinung über einen Löschvorgang ändern - den ganzen Grund, warum wir einen Papierkorb haben. – Bob77

+1

Es scheint hier jedoch aus einem Hauptprogramm zu funktionieren. Beachten Sie, dass "Empty" für den Parameter hWnd funktioniert, aber eine explizite 0 ist wahrscheinlich eine bessere Wahl. Ich erhalte den Prompt-Dialog, obwohl nichts dem Benutzer sagt, dass er aufgefordert wird, den Papierkorb zu leeren. – Bob77

+0

Ein paar Punkte. Ich verwende dies, um einen Server zu bereinigen, der nur von Administratoren verwendet wird, nicht von tatsächlichen Benutzern. Ich habe herausgefunden, was das Problem ist. Dies wird als eine geplante Aufgabe unter einem Benutzerkonto ausgeführt, das Dinge im Hintergrund erledigt, so dass das Bestätigungsfenster (von dem ich nicht wusste, dass es existiert) nicht angezeigt wird. Ich gehe davon aus, dass der Anruf mit einem Cancel endet, und gibt daher 0 zurück, weil es in Ordnung abgebrochen wurde. Ich denke, ich muss herausfinden, ob ich das Löschen programmgesteuert bestätigen kann. –

Antwort

1

Sie können dies überprüfen sample.

Grundsätzlich SHEmptyRecycleBin 0, vbNullString, 0 oder Call SHEmptyRecycleBin(0, vbNullString, 0) sollte in Ordnung sein, aber sie übergeben eine tatsächliche hwnd für die Funktion UI als Besitzer Fenster zu verwenden.