IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Propriétés de la corbeille


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut Propriétés de la corbeille
    Bonjour,

    Je cherche à lire les paramètres de la corbeille, c'est à dire les espaces réservés par partition ou média complet.
    J'ai bien trouvé et exploité les deux API SHQueryRecycleBin et SHEmptyRecycleBin, mais pas moyen de trouver dans
    les ressources ce qui me permettrais de trouver le moyen de lire ces propriétés.

    Si vous avez une idée, je suis preneur,

    merci

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 130
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 130
    Par défaut
    Bonjour,

    -- je n'ai rien testé, me suis contenté de lire (et pour cause ! Je suis sous Linux, ) --

    une première lecture intéressante, mais peut-être un peu vieillotte :
    https://gist.github.com/maul-esel/1808118

    une deuxième, en purebasic donc ça doit pouvoir s'adapter facilement
    https://www.purebasic.fr/french/viewtopic.php?p=210871

    et peut-être que ça pourrait être la solution à ce problème vieux de 12 ans posté dans un sous-forum de dvlp :
    https://www.developpez.net/forums/d8...in-seven-64-a/

    Bon code et bon dimanche,

  3. #3
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut
    Bonjour Jipété,

    Merci pour ta recherche, mais malheureusement ce que tu as trouvé ne concerne que les deux API que j'ai trouvé sur la corbeille,
    l'interrogation du nombre de fichier et le volume de ces fichiers via SHQueryRecycleBin et
    le vidage de la corbeille via ShEmptyRecyclebin.

    Moi, ce que je cherche, ce sont les propriétés de la corbeille:
    - La liste des disques pourvu d'une corbeille et la place allouée, pour chaque disque, à chaque corbeille.

    Mon objectif étant de savoir, si la place allouée est suffisante pour recevoir un fichier de volume conséquent.
    Car si ce n'est pas le cas, lors de l'envoi de fichier vers la corbeille, si on affiche le dialog de suppression de fichier,
    le système propose de supprimer le fichier définitivement sans possibilité de UNDO, soit d'annuler l'opération.
    Et ces deux solutions ne me conviennent pas.
    Je veux savoir avant le lancement en corbeille, si l'espace alloué est suffisant pour contenir les fichiers envoyés dans cette corbeille.

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je serai parti sur des WMI mais même avec Wmi Delphi Code Creator je ne vois pas vraiment ce que je cherche
    ou alors par les registres pour obtenir le nom

    Sinon avec IOUtils et le nom il est relativement facile d'obtenir la taille
    code FMX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if TDirectory.Exists('C:\$RECYCLE.BIN') then
        label1.Text:= TFile.GetSize('C:\$RECYCLE.BIN').ToString
        else label1.Text:='non accessible';
    j'ai essayé ça pour obtenir le path
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function GetMyPoubelle : string;
     var
      r: Bool;
      path: array[0..Max_Path] of Char;
     begin
      r := ShGetSpecialFolderPath(0, path, CSIDL_BITBUCKET, False) ;
      if not r then
        raise Exception.Create('Could not find recyclebin folder location.') ;
      Result := Path;
     end;
    mais sans résultat : exception levée

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Mon D10 n'a pas encore GetSize et la méthode par FindFirst renvoie 0 pour ces dossiers

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volumeon trouve la taille maximale mais j'ignore comment associé le GUID à au disque

    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
    procedure TForm.ButtonClick(Sender: TObject);
     
      function GetFileSize(const APath: string): Int64;
      var
        Sr : TSearchRec;
      Begin
        if FindFirst(APath, faAnyFile, Sr) =  0 then
        begin
          try
            LARGE_INTEGER(Result).HighPart := Sr.FindData.nFileSizeHigh; // 0 !
            LARGE_INTEGER(Result).LowPart := Sr.FindData.nFileSizeLow; // 0 !
          finally
            FindClose(Sr);
          end
        end
        else
          Result := 0;
      end;
     
    var
      C: Char;
      Info: SHQUERYRBINFO;
    begin
      for C := 'A' to 'Z' do
      begin
        ZeroMemory(@Info, SizeOf(Info));
        Info.cbSize := SizeOf(Info);
        if SHQueryRecycleBin(PWideChar(C + ':\'), @Info) = s_OK then
          Memo.Lines.Add(Format('%s:\ - Taille occupée : %do pour %d éléments sur taille maximale %d', [C, Info.i64Size, Info.i64NumItems, GetFileSize(Format('%s:\$RECYCLE.BIN', [C]))]));
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    GUID trouvé !

    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
    41
    42
    43
    44
    procedure TForm.ButtonClick(Sender: TObject);
     
      function GetBucketSize(C: Char): Int64;
      var
        VolumeName: array[0..MAX_PATH] of Char;
      Begin
        Result := 0;
        // Bug de déclaration  GetVolumeNameForVolumeMountPointW en LPCSTR au lieu de LPCWSTR
        if GetVolumeNameForVolumeMountPoint(PAnsiChar(PByte(C + ':\')), @VolumeName[0], MAX_PATH) then
        begin
          with TRegistry.Create(KEY_READ) do
          try
            if OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume', False) then
            begin
              if OpenKey(StringReplace(StringReplace(VolumeName, '\\?\Volume', '', []), '\', '', []), False) then
              begin
                Result := ReadInteger('MaxCapacity');
                Result := Result * 1024 * 1024;
              end
              else
                Result := -2;
            end
            else
              Result := -1;
          finally
            Free();
          end;
        end
        else
          RaiseLastOSError();
      end;
     
    var
      C: Char;
      Info: SHQUERYRBINFO;
    begin
      for C := 'A' to 'Z' do
      begin
        ZeroMemory(@Info, SizeOf(Info));
        Info.cbSize := SizeOf(Info);
        if SHQueryRecycleBin(PWideChar(C + ':\'), @Info) = s_OK then
          Memo.Lines.Add(Format('%s:\ - Taille occupée : %do pour %d éléments sur taille maximale %do', [C, Info.i64Size, Info.i64NumItems, GetBucketSize(C)]));
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ActiveX] Propriété "Picture" dans un contrôle util
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/12/2002, 15h59
  2. Accés rapide aux propriétés d'un Objet
    Par Alacazam dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2002, 21h56
  3. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. [propriétés]Option Checked
    Par psl dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/08/2002, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo