2011-01-07 4 views
0

하드 디스크 공간을 비우는 프로세스의 일부로 휴지통을 비우려고합니다. 그는 내가 지금까지 가지고있는 코드이다. 내 클래스의 상단에 : 나는이 시도VB6의 SHEmptyRecycleBin이 아무 것도하지 않습니다.

SHEmptyRecycleBin(Empty, vbNullString, 0) 
SHUpdateRecycleBinIcon 

:

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 

그런 다음 하드 디스크의 기능을 정리

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

을하지만 성공을 나타내는 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에 모든 코드를 보관하려고합니다.

+2

이 프로그램이 귀하 자신의 용도로만 사용되기를 바랍니다. 프로그램이 사용자로부터 멀리 떨어져있는 것을 제어하는 ​​것은 좋지 않습니다. 나는 휴지통을 깨끗하게 유지하지만 많은 사용자들은 휴지통을 가지고있는 이유 때문에 삭제 작업에 대해 마음이 바뀌면 "거기에 매달려있는"것에 의존합니다. – Bob77

+1

그러나 여기에서 주 프로그램에서 작동하는 것 같습니다. hWnd 매개 변수에 대해 "Empty"가 작동하지만 명시적인 0이 더 나은 선택임을 유의하십시오. 거기에는 아무 정보도 표시되지 않지만 확인 대화 상자가 표시됩니다. 사용자에게 휴지통을 비우는 메시지가 표시됩니다. – Bob77

+0

몇 가지 사항이 있습니다. 나는 이것을 사용하여 실제 사용자가 아닌 관리자 만 사용하는 서버를 정리합니다. 나는 그 문제가 무엇인지 알아 냈다. 이 작업은 예약 된 작업으로 백그라운드에서 수행하는 사용자 계정으로 실행되므로 확인하지 않은 윈도우가 표시되지 않습니다. 나는 전화가 취소로 끝나는 것으로 추정하고 따라서 취소했기 때문에 0을 반환합니다. 프로그래밍 방식으로 삭제를 확인할 수 있는지 알아야 할 것 같습니다. –

답변

1

이 내용은 sample입니다.

기본적으로 SHEmptyRecycleBin 0, vbNullString, 0 또는 Call SHEmptyRecycleBin(0, vbNullString, 0)은 정상이어야하지만, 소유자 UI로 사용하려면 함수 UI에 실제 hwnd을 전달해야합니다.

관련 문제