............
Publié : dim. 23/mars/2008 22:21
...................
Tu dois avoir une poubelle sans fond
Code : Tout sélectionner
Procedure.b Trash_state()
Structure SHQUERYRBINFO
cbSize.l
i64Size.ULARGE_INTEGER
i64NumItems.ULARGE_INTEGER
EndStructure
RBinInfo.SHQUERYRBINFO
RBinInfo\cbSize = SizeOf(SHQUERYRBINFO)
If OpenLibrary(0,"shell32.dll") And GetFunction(0,"SHQueryRecycleBinW")
test.l=CallFunction(0,"SHQueryRecycleBinW",0,RBinInfo)
CloseLibrary(0)
EndIf
If RBinInfo\i64Size\lowpart>0
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug Trash_state()
Code : Tout sélectionner
EnableExplicit
#SHCONTF_FOLDERS = $0020
#SHCONTF_NONFOLDERS = $0040
#SHCONTF_INCLUDEHIDDEN = $0080
Procedure Trash_GetState()
; Return
; #False If the recycle bin is empty
; #True If the recycle bin contains files
Protected bResult.l = #False
Protected pDesktop.IShellFolder = #Null
Protected *pidlRecycleBin.ITEMIDLIST ;= #Null
Protected hr.l = #S_OK
Protected m_pRecycleBin.IShellFolder
Protected penumFiles.IEnumIDList
Protected *pidl.ITEMIDLIST
Protected pMalloc.IMalloc
hr = SHGetDesktopFolder_(@pDesktop)
hr = SHGetSpecialFolderLocation_(#Null, #CSIDL_BITBUCKET, @*pidlRecycleBin)
hr = pDesktop\BindToObject(*pidlRecycleBin, #Null, ?IID_IShellFolder, @m_pRecycleBin)
pDesktop\Release()
SHGetMalloc_(@pMalloc) ; windows memory management pointer needed later
hr = m_pRecycleBin\EnumObjects(#Null, #SHCONTF_FOLDERS|#SHCONTF_NONFOLDERS|#SHCONTF_INCLUDEHIDDEN, @penumFiles)
If hr = #S_OK
While(penumFiles\Next(1, @*pidl, #Null) <> #S_FALSE)
bResult = #True
Break
Wend
EndIf
If penumFiles <> #Null
penumFiles\Release()
penumFiles = #Null
EndIf
pMalloc\Release()
ProcedureReturn bResult
EndProcedure
Debug Trash_GetState()
DataSection
; Interface IShellFolder;
; helpstring("IShellFolder"),
; uuid(000214E6-0000-0000-C000-000000000046)
IID_IShellFolder : ; cléf du registre mise sous la forme de DATA
Data.l $000214E6
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection
Code : Tout sélectionner
Procedure.b Trash_state()
Structure SHQUERYRBINFO
cbSize.l
i64Size.ULARGE_INTEGER
i64NumItems.ULARGE_INTEGER
EndStructure
RBinInfo.SHQUERYRBINFO
RBinInfo\cbSize = SizeOf(SHQUERYRBINFO)
If OpenLibrary(0,"shell32.dll") And GetFunction(0,"SHQueryRecycleBinW")
If CallFunction(0,"SHQueryRecycleBinW",0,@RBinInfo)=#S_OK
CloseLibrary(0)
Debug RBinInfo\i64Size\lowpart
Debug RBinInfo\i64Size\highpart
If RBinInfo\i64NumItems\lowpart>0 Or RBinInfo\i64NumItems\highpart > 0
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
Else
MessageRequester("Info","Erreur")
EndIf
EndIf
EndProcedure
Debug Trash_state()