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

Delphi Discussion :

GetVolumeInformation renvoyant des infos différentes dans le temps ?


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut GetVolumeInformation renvoyant des infos différentes dans le temps ?
    Bonjour,

    J'utilise la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // fonction retournant le numero de serie du disque systeme
    function GetVolumeInformationWindowsDrive: Cardinal;
    var
      Len: Cardinal;
      Drive: string;
    begin
      SetLength(Drive, MAX_PATH);
      Len:=Windows.GetWindowsDirectory(PChar(Drive), MAX_PATH);
      SetLength(Drive, Len);
      GetVolumeInformation(PChar(ExtractFileDrive(Drive)), nil, 0, @Result, Len, Len, nil, 0);
    end; {* func GetVolumeInformationWindowsDrive *}
    et j'obtiens une chose bizarre, sur mon poste tout semble fonctionner mais sur les autres ordinateurs il semble que @Result ne renvoie pas le même
    numero alors que mis à part le temps qui est passé (1 an env.) j'obtiens des valeurs différentes. J'ai testé cela sur 3 ordianteurs différents.

    Une idée ?

    Note : ni partition, ni formattage, ni upgrade de windows, ni rien n'a été fait entre les deux essais.

    Merci à tous pour vos infos.

    Bruno

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 746
    Points : 15 166
    Points
    15 166
    Par défaut
    'Soir,
    // fonction retournant le numero de serie du disque systeme
    Tu veux dire que sur ces machines le numéro de série a changé entre il y a un an et maintenant ?
    (parce qu'il est pas clair, ton post [comme beaucoup d'autres tu me diras -- à croire que tout le monde est faché avec la ponctuation : quelle plaie pour lire et décoder, des fois...])
    --
    jp
    Et bien le bonjour à la Bonne Mère, cong !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Bruno13
    et j'obtiens une chose bizarre, sur mon poste tout semble fonctionner mais sur les autres ordinateurs il semble que @Result ne renvoie pas le même
    numero alors que mis à part le temps qui est passé (1 an env.) j'obtiens des valeurs différentes. J'ai testé cela sur 3 ordianteurs différents.
    C'est @Result ou Result qui est différent?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bonsoir,

    désolé si le message n'a pas été assez clair.
    Oui je veux bien dire que le retour de ma procedure est différent de celui que j'avais il y a un an alors que rien n'a été modifié entre temps au niveau des partitions des disques durs.

    Pour @result et result en fait je ne m'y attarde pas car c tout simplement le retour de ma fonction GetVolumeInformationWindowsDrive: Cardinal; qui différe.

    Merci pour vos conseils, car là je comprends pas.

    Note : un nouvel élement vient de m'arriver, les autres ordinateurs sont des portables.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 746
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 746
    Points : 15 166
    Points
    15 166
    Par défaut
    Salut,

    Tiens, tu testeras ça :
    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
    function o_DriveGetInfoKey( const _drive, _key : string): string;
    var
      f_Label, f_FileSystemName: string;
      f_LongName, f_FileSystemFlags: DWORD;
      pf_Serial : PDWORD;
      f_Serial: integer;
    begin
      Result:= '';
      if _drive = '' then
        Exit;
      // Initialisation buffers, pointeur
      Setlength( f_Label , 255 );
      Setlength( f_FileSystemName , 255 );
      GetMem( pf_Serial , 255 );
      // Retrouve les infos
      GetVolumeInformation( PChar( _drive + '\' ) ,  PChar( f_Label ) , 255 , pf_Serial ,
        f_LongName , f_FileSystemFlags , PChar( f_FileSystemName ) , 255);
      // Récupère le numéro de série et libère la mémoire
      f_Serial:=pf_Serial^;
      FreeMem( pf_Serial, 255 );
      if _key = 'DLABEL' then // Nom du disque
        Result:= string( PChar( f_Label ) )
      else if _key = 'DSERIAL' then // Numéro de série du disque : pas en UNC
        Result:= o_Lefts( inttohex( f_Serial , 8 ) , 4 ) + '-' +
                     o_Rights( inttohex( f_Serial , 8 ) , 4 )
      else if _key = 'DLONGNAME' then begin // Support des noms longs
        if f_LongName = 255 then
            Result:= '255'
        else
            Result:= '0';
        end
      else if _key = 'DSYSTEM' then      		// Système de fichiers
        Result:= string( PChar( f_FileSystemName ) )
    end;
    - - -
    Ça ne s'arrange pas, hein :
    un nouvelle élements vient
    un nouvel élément serait quand même plus joli, tu ne trouves pas ?
    --
    jp, cours d'informatique et de français,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Jipété,

    Merci pour ce bout de code qui va me permettre de connaître d'autres methodes mais qui ne va pas résoudre mon problème car en fait ma fonction est en place depuis longtemps et je n'ai remarqué ce problème que maintenant ce qui fait que je ne peux pas remplacer l'existant et updater tous mes logiciels.

    Pour les erreurs d'orthographe, j'avoue qu'il était tard, d'habitude je relis mes messages pour les corriger mais là, à 3h du mat, j'ai eu la flemme.

    Amitiés,
    Bruno

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 746
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 746
    Points : 15 166
    Points
    15 166
    Par défaut
    Yep !
    Complément d'info : mon sdk me dit, dans la structure NTFS_VOLUME_DATA_BUFFER,
    VolumeSerialNumber
    Serial number of the volume. This is a unique number assigned to the volume media by the operating system.
    Est-ce bien *cette* info qui t'intéresse ? C'est plus de précision que le laconique
    lpVolumeSerialNumber
    [out] A pointer to a variable that receives the volume serial number.
    This parameter can be NULL if the serial number is not required.
    Windows Me/98/95: If the queried volume is a network drive, the serial number is not returned.
    de la fonction GetVolumeInformation. Si t'as besoin d'autres infos, ask !

    à 3h du mat, j'ai eu la flemme.
    Ça va, t'es excusé
    À +,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Merci pour toutes ces infos.

    Amitiés,
    Bruno

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    Tiens, tu testeras ça :
    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
    function o_DriveGetInfoKey( const _drive, _key : string): string;
    var
      f_Label, f_FileSystemName: string;
      f_LongName, f_FileSystemFlags: DWORD;
      pf_Serial : PDWORD;
      f_Serial: integer;
    begin
      Result:= '';
      if _drive = '' then
        Exit;
      // Initialisation buffers, pointeur
      Setlength( f_Label , 255 );
      Setlength( f_FileSystemName , 255 );
      GetMem( pf_Serial , 255 );
      // Retrouve les infos
      GetVolumeInformation( PChar( _drive + '\' ) ,  PChar( f_Label ) , 255 , pf_Serial ,
        f_LongName , f_FileSystemFlags , PChar( f_FileSystemName ) , 255);
      // Récupère le numéro de série et libère la mémoire
      f_Serial:=pf_Serial^;
      FreeMem( pf_Serial, 255 );
      if _key = 'DLABEL' then // Nom du disque
        Result:= string( PChar( f_Label ) )
      else if _key = 'DSERIAL' then // Numéro de série du disque : pas en UNC
        Result:= o_Lefts( inttohex( f_Serial , 8 ) , 4 ) + '-' +
                     o_Rights( inttohex( f_Serial , 8 ) , 4 )
      else if _key = 'DLONGNAME' then begin // Support des noms longs
        if f_LongName = 255 then
            Result:= '255'
        else
            Result:= '0';
        end
      else if _key = 'DSYSTEM' then              // Système de fichiers
        Result:= string( PChar( f_FileSystemName ) )
    end;
    - - -
    Ça ne s'arrange pas, hein :

    un nouvel élément serait quand même plus joli, tu ne trouves pas ?
    --
    jp, cours d'informatique et de français,
    Salut à tous,

    Salut Jipété,

    Désolé de réveiller ce vieux topic mais je souhaite utiliser la fonction que tu mets à disposition.

    Toutefois, je constate que tu utilises dans ta fonction deux composantes (des fonctions je pense) "o_Lefts" et "o_Rights".

    S'agit-il de fonctions que tu as écrit ? Auquel cas je serais intéressé pour les avoir.
    Ou dois-je ajouter une source dans les clauses "uses" ?

    Merci pour ton retour.

    Naga

    Edit :

    Bon, si je m'étais un peu creusé la cervelle, je les auraient codées moi mêmes ces deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function o_Lefts(ChaineSaisie : String; NbCaracteres : Integer) : String;
    begin
      Result := Copy(ChaineSaisie, 0, NbCaracteres);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function o_Rights(ChaineSaisie : String; NbCaracteres : Integer) : String;
    begin
      Result := Copy(ChaineSaisie, Length(ChaineSaisie) - NbCaracteres + 1, Length(ChaineSaisie));
    end;

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

Discussions similaires

  1. [WD-2003] Mettre une info différente dans des pieds de pages liés
    Par dacid dans le forum VBA Word
    Réponses: 8
    Dernier message: 18/05/2011, 09h30
  2. Réponses: 7
    Dernier message: 13/10/2006, 00h45
  3. [MySQL] Comparer des info date dans une requete SQL
    Par kaygee dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 06/01/2006, 21h56
  4. [TP7] Renvoyer des infos dans la console pour redirection
    Par Natopsi dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 05/11/2005, 18h21
  5. Réponses: 3
    Dernier message: 15/04/2004, 08h44

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