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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

...................
Dernière modification par Backup le ven. 07/oct./2011 12:24, modifié 2 fois.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Merci Dobro, je l'avais loupé :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

...............
Dernière modification par Backup le sam. 19/mars/2011 16:56, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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
Dernière modification par Kwai chang caine le lun. 24/mars/2008 16:44, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu dois avoir une poubelle sans fond :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Tu dois avoir une poubelle sans fond
:lol:

Un peu comme ma vie quoi :lol:
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message 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 :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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() 
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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()
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message 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^^
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

PROGI et NICO
10/10
Trés bon éleve :lol:

Merci à tous les deux
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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. :)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Par contre, testé que sur du XP :S
Répondre