Page 1 sur 1

............

Publié : dim. 23/mars/2008 22:21
par Backup
...................

Publié : dim. 23/mars/2008 23:28
par Droopy
Merci Dobro, je l'avais loupé :wink:

Publié : lun. 24/mars/2008 12:43
par Backup
...............

Publié : lun. 24/mars/2008 16:30
par Kwai chang caine
Bonjour DOBRO

Bah chez moi, ton code retourne 0 dans les deux cas.
Vide ou pleine.:cry:

XP Pro / v4.10

Publié : lun. 24/mars/2008 16:34
par Anonyme2
Tu dois avoir une poubelle sans fond :D

Publié : lun. 24/mars/2008 16:43
par Kwai chang caine
Tu dois avoir une poubelle sans fond
:lol:

Un peu comme ma vie quoi :lol:

Publié : lun. 24/mars/2008 16:58
par case
moi ma poubelle c'est un incinérateur tout ce que j'y met disparait pour l'éternité.
on peux pas fouiller dedans :)

Publié : lun. 24/mars/2008 17:27
par nico
C'est à cause du test:

Remplace:
If RBinInfo\i64Size\lowpart & 1 = 1 Or RBinInfo\i64Size\highpart > 0

par:
If RBinInfo\i64Size\lowpart>0


Je ne suis pas sûr que ça fonctionne à tous les coups, j'ai pas regardé sur MSDN

Publié : lun. 24/mars/2008 17:33
par Kwai chang caine
Merci NICO de ta réponse.
Y'en a qu'un qui est serieux dans cette classe :D

Malheureusement, meme punition, j'ai fait comme tu m'a dit et toujours zéro dans les deux cas :cry:

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() 

Publié : lun. 24/mars/2008 17:54
par Progi1984
Essayez ce code que je viens de vous confectionner :)

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 

Publié : lun. 24/mars/2008 17:55
par nico
Faut tester les deux integer dans ULARGE_INTEGER de i64Size ou i64NumItems, au choix.

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()

Publié : lun. 24/mars/2008 17:57
par Neosis
bravo "Progi1984" ça marche impec :) ... désolé dobro mais ton code ne marche pas vraiment chez moi :?

EDIT: ton code marche aussi nico^^

Publié : lun. 24/mars/2008 18:02
par Kwai chang caine
PROGI et NICO
10/10
Trés bon éleve :lol:

Merci à tous les deux

Publié : lun. 24/mars/2008 18:11
par nico
Sous window 2000, il faut renseigner le patch du presse papier au lieu de 0 à l'appel de la fonction :CallFunction(0,"SHQueryRecycleBinW",0,@RBinInfo)

Mais apparemment on ne pourrait pas l'obtenir avec SHGetPathFromIDList (du moins pas sur toutes les versions, avec 2000 ?), normalement c'est c:\recycled mais sur XP il y a ce dossier sur chaque lecteur, 2000 ?

Donc mieux vaut prendre le code de Progi. :)

Publié : lun. 24/mars/2008 19:10
par Progi1984
Par contre, testé que sur du XP :S