Bonjour,

J'ai développé une application en C# qui fait pleins de choses, dont afficher si il y a quelque chose dans la corbeille et permettre de la vider.

J'ai pour cela utiliser des fonctions systèmes présentes dans Shell32.dll.

Tout fonctionnait bien sur XP SP3 (32 bits) mais depuis mon passage en seven 64 bit, cela ne fonctionne plus (mais je n'ai pas d'exception).

la fonction SHQueryRecycleBin retourne toujours 0 elements de taille 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
        [DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
        static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,RecycleFlags dwFlags);
 
        [DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
        static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
 
        enum RecycleFlags : uint {
            SHERB_NOCONFIRMATION = 0x00000001,
            SHERB_NOPROGRESSUI = 0x00000002,
            SHERB_NOSOUND = 0x00000004
        }
 
        [StructLayout(LayoutKind.Explicit, Size=20)]
        public struct SHQUERYRBINFO{
            [FieldOffset(0)]  public int  cbSize ;
            [FieldOffset(4)]  public long i64Size ;
            [FieldOffset(12)] public long i64NumItems ;
        }
 
        // vide la poubelle (avec ou sans confirmation)
        public static uint emptyRecycleBin(bool disableConfirmation) {
            uint retour;
 
            if (disableConfirmation) {
                retour = SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION);
            } else {
                retour = SHEmptyRecycleBin(IntPtr.Zero, null, 0);
            }
 
            return retour;
        }
 
        // récupère des infos sur le contenu de la poubelle
        public static SHQUERYRBINFO getInfosFromRecycleBin() {
            SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();
            sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
            int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);
            return sqrbi;
        }
J'ai regardé sur le net mais je n'ai rien trouvé expliquant le problème.

Quelqu'un aurait il une idée de pourquoi ça marche pas sous seven 64 (j'utilise visual studio express 2008) ?

merci d'avance.

Cordialement,