begin process at 2012 02 11 15:50:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > DISKINFO V1.0.0

DISKINFO V1.0.0


 Description

Cliquez pour voir la capture en taille normale
3 éme contribution pour fêter ma première semaine sur Delphi ;) Un programme qui traite les informations des volumes du PC.

Source

  • {===============================================================================
  • Code Source : BEAUMONT Christophe
  • Version : 1.0.0
  • Date : 26 Février 2010
  • Etude 03 - Exemple de récupération d'informations sur les volumes d'un PC.
  • ===============================================================================}
  • unit f_Main;
  • interface
  • uses
  • Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  • Dialogs, Gauges, StdCtrls, FileCtrl;
  • type
  • TForm_Main = class(TForm)
  • Drives: TDriveComboBox;
  • TypeDrive: TLabel;
  • NameDrive: TLabel;
  • SerialNumber: TLabel;
  • SystemeFile: TLabel;
  • FreeSpace: TLabel;
  • TotalSpace: TLabel;
  • procedure SelectNewDisk(Sender: TObject);
  • private
  • { Déclarations privées }
  • public
  • { Déclarations publiques }
  • end;
  • var
  • Form_Main: TForm_Main;
  • implementation
  • {$R *.dfm}
  • // Cette procédure sera automatiquement exécutée à chaque changement du composant
  • // TDriveComboBox.
  • procedure TForm_Main.SelectNewDisk(Sender: TObject);
  • // On fait les déclarations qui vont être nécessaires à nos fonctions
  • var BuffNom : Array[0..255]of Char; // Buffer pour GetVolumeInformation
  • BuffSys : Array[0..255]of Char; // Buffer pour GetVolumeInformation
  • Serie, Long, Flags : DWord; // pour GetVolumeInformation
  • TDrive : String; // Pour stocker les types de volumes
  • FreeBytesAvailable, TotalNumberofBytes, TotalNumberofFreeBytes : TLargeInteger;
  • begin
  • // on récupère les informations du volume sélectionné dans le TDriveComboBox
  • GetVolumeInformation(PChar(Drives.Drive+':\')
  • ,@BuffNom,SizeOf(BuffNom) // contiendra le nom
  • ,@Serie // contiendra le n° de série
  • ,Long
  • ,Flags
  • ,@BuffSys,SizeOf(BuffSys)); // et le type de fichiers
  • // on récupère l'information sur le type de volume sélectionné dans le TDriveComboBox
  • case GetDriveType(PChar(Drives.Drive+':\')) of
  • DRIVE_UNKNOWN : TDrive := 'Lecteur inconnu'; // met le résultat dans un String
  • DRIVE_NO_ROOT_DIR : TDrive := 'Chemin racine invalide';
  • DRIVE_REMOVABLE : TDrive := 'Disque Amovible';
  • DRIVE_FIXED : TDrive := 'Disque Dur';
  • DRIVE_REMOTE : TDrive := 'Disque Internet';
  • DRIVE_CDROM : TDrive := 'Lecteur CD';
  • DRIVE_RAMDISK : TDrive := 'Disque RAM';
  • end;
  • // On affiche le nom du volume sélectionné
  • NameDrive.Caption := 'Nom du Volume : '+BuffNom;
  • // on affiche le système de fichiers ( NTFS , FAT32 )
  • SystemeFile.Caption := 'Système de Fichiers : '+BuffSys;
  • // on affiche le numéro de série du volume
  • SerialNumber.Caption := 'Numéro de Série : '+IntToStr(Serie);
  • TypeDrive.Caption := 'Type de lecteur : '+TDrive;
  • // Si le string est différent de NUL alors le volume existe
  • if TDrive <>'' then
  • // On utilise GetDiskFreeSpaceEx pour traiter des volumes supérieurs à 2Go
  • GetDiskFreeSpaceEx(PChar(Drives.Drive+':\'),FreeBytesAvailable, TotalNumberofBytes, @TotalNumberofFreeBytes);
  • // on affiche le nombre d'octets libres
  • FreeSpace.Caption := IntToStr(TotalNumberofFreeBytes)+' octets libres';
  • // on affiche la capacité totale du volume en octets
  • TotalSpace.Caption := IntToStr(TotalNumberOfBytes)+' octets de capacité';
  • end;
  • end.
{===============================================================================
Code Source : BEAUMONT Christophe
Version     : 1.0.0
Date        : 26 Février 2010

Etude 03 - Exemple de récupération d'informations sur les volumes d'un PC.
===============================================================================}

unit f_Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Gauges, StdCtrls, FileCtrl;

type
  TForm_Main = class(TForm)
    Drives: TDriveComboBox;
    TypeDrive: TLabel;
    NameDrive: TLabel;
    SerialNumber: TLabel;
    SystemeFile: TLabel;
    FreeSpace: TLabel;
    TotalSpace: TLabel;
    procedure SelectNewDisk(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form_Main: TForm_Main;

implementation

{$R *.dfm}

// Cette procédure sera automatiquement exécutée à chaque changement du composant
// TDriveComboBox.
procedure TForm_Main.SelectNewDisk(Sender: TObject);
// On fait les déclarations qui vont être nécessaires à nos fonctions
var BuffNom : Array[0..255]of Char; // Buffer pour GetVolumeInformation
    BuffSys : Array[0..255]of Char; // Buffer pour GetVolumeInformation
    Serie, Long, Flags : DWord; // pour GetVolumeInformation
    TDrive  : String; // Pour stocker les types de volumes
    FreeBytesAvailable, TotalNumberofBytes, TotalNumberofFreeBytes : TLargeInteger;
begin
// on récupère les informations du volume sélectionné dans le TDriveComboBox
 GetVolumeInformation(PChar(Drives.Drive+':\')
                         ,@BuffNom,SizeOf(BuffNom) // contiendra le nom
                         ,@Serie                   // contiendra le n° de série
                         ,Long
                         ,Flags
                         ,@BuffSys,SizeOf(BuffSys)); // et le type de fichiers
// on récupère l'information sur le type de volume sélectionné dans le TDriveComboBox
  case GetDriveType(PChar(Drives.Drive+':\')) of
    DRIVE_UNKNOWN     : TDrive := 'Lecteur inconnu'; // met le résultat dans un String
    DRIVE_NO_ROOT_DIR : TDrive := 'Chemin racine invalide';
    DRIVE_REMOVABLE   : TDrive := 'Disque Amovible';
    DRIVE_FIXED       : TDrive := 'Disque Dur';
    DRIVE_REMOTE      : TDrive := 'Disque Internet';
    DRIVE_CDROM       : TDrive := 'Lecteur CD';
    DRIVE_RAMDISK     : TDrive := 'Disque RAM';
  end;
// On affiche le nom du volume sélectionné
  NameDrive.Caption := 'Nom du Volume : '+BuffNom;
// on affiche le système de fichiers ( NTFS , FAT32 )
  SystemeFile.Caption := 'Système de Fichiers : '+BuffSys;
// on affiche le numéro de série du volume
  SerialNumber.Caption := 'Numéro de Série : '+IntToStr(Serie);
  TypeDrive.Caption := 'Type de lecteur : '+TDrive;
// Si le string est différent de NUL alors le volume existe
  if TDrive <>'' then
// On utilise GetDiskFreeSpaceEx pour traiter des volumes supérieurs à 2Go
    GetDiskFreeSpaceEx(PChar(Drives.Drive+':\'),FreeBytesAvailable, TotalNumberofBytes, @TotalNumberofFreeBytes);
// on affiche le nombre d'octets libres
    FreeSpace.Caption := IntToStr(TotalNumberofFreeBytes)+' octets libres';
// on affiche la capacité totale du volume en octets
    TotalSpace.Caption := IntToStr(TotalNumberOfBytes)+' octets de capacité';
end;

end.

 Conclusion

Delphi c'est trop bien !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture FIREMONKEY : PATHDATA ET FORMAT SVG
Source avec Zip Source avec une capture FIREMONKEY : ROTATION CUBE
Source avec Zip Source avec une capture FIREMONKEY : HELLO WORLD !
Source avec Zip Source avec une capture MÉMO V1.0.0
Source avec Zip Source avec une capture CHRONOS V1.0.0

 Sources de la même categorie

Source avec Zip LECTURE DE LA MEMOIRE D'UN AUTRE PROCESSUS par Mokost
Source avec Zip Source avec une capture LIBÉRER LA TAILLE MAXIMALE D'UNE FENÊTRE PAR SUBCLASSING par rt15
Source avec Zip Source avec une capture OBSERVATEUR DE PROCESSUS ACTIFS; VPROCESS 1,0 par Neftali
UN SELECTDIRECTORY QUI SE PLACE AU BON ENDROIT par ThWilliam
Source avec une capture VOTRE PROGRAMME DE MAIL COMME CLIENT MAIL PAR DÉFAUT SOUS WI... par MAURICIO

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VISIOMEM - AFFICHER VOTRE MÉMOIRE par Bacterius
Source avec Zip Source avec une capture INFORMATIONS DISQUE ET SYSTEME par HAFTARIFOUAD
Source avec Zip CHAÎNE DE MESURE ET TRAITEMENTS par mounjetado
Source avec Zip LISTER LES PROCESSUS SYSTÈMES EN COURS DE FONCTIONNEMENT par oliverdev
Source avec Zip Source avec une capture VERROUILLEUR D'APPLICATION par WhiteHippo

Commentaires et avis

Commentaire de defis91 le 27/02/2010 12:30:51

En effet vive delphi !
On croirait de la programation Microsoft.
Vous faites confiance au compilateur pour initialiser les variables (pensez à mettre un else dans le case)
Vous mélangez allègrement strings et arrays sans contrôle.
A+
Dom EFIS

Commentaire de Bacterius le 28/02/2010 01:55:43

u_U

"Vous faites confiance au compilateur pour initialiser les variables (pensez à mettre un else dans le case)"
Si tu fais pas confiance au compilateur, alors fais de l'assembleur.
Si tu fais pas confiance aux API, ne les utilise pas. Toutes les API ont été vues, revues et rerevues, et si la documentation précise qu'elle ne peut pas renvoyer de valeur erronée (et parfois, la documentation précise explicitement qu'une erreur peut survenir dans tel et tel cas, dans quel cas il faut prévoir un contrôle), alors il faut le croire, sinon autant faire ton propre OS. Et puis tant qu'on y est, tu peux aussi construire tes transistors, et monter ton ordinateur toi-même, il beugera pas comme ça.

"Vous mélangez allègrement strings et arrays sans contrôle."
Et un string, c'est quoi à ton avis ? Un array dis donc !

Perso je trouve ce code bien écrit, bien présenté (même si il reste des choses à voir), mais j'aurai davantage apprécié un mode console, plutôt que de créer une fenêtre Windows pour si peu de chose.

Ce genre de petit commentaire prétentieux, merci de les éviter et d'être constructif la prochaine fois.

Cordialement, Bacterius !

Commentaire de defis91 le 28/02/2010 12:58:32

Désolé pour la suite Christophe du 67...
Oh là, Bacterius, mon commentaire n'était pas prétentieux du tout, mais constructif.
Juste une réaction viscérale due à l'expérience.
Je ne vois pas pourquoi un " else TDrive:=''; " te met dans des états pareils.
Cela permet de prendre de bonnes habitudes et de ne pas se poser de question sur la portée de la variable quand le programme devient complexes. (ici ok, cette variable est locale).
Quand je dis merci Delphi, c'est justement que son compilateur est génial, la plupart des bugs est détectée à la compilation.
J'ai eu l'occasion à l'époque d'analyser les corrections de MS sur Windows95.
95% des bugs (en C) étaient sur les case et les array.  
Il ne faut pas juger un programme (que) sur sa présentation, mais sur son aptitude à gérer tous les cas.
Pour les array, je te souhaite de ne jamais travailler sur les bases de données en unicode si tu n'as pas conscience des limites utiles de la valeur d'un array.
Delphi n'aime pas le mélange string+array, il copie tout l'array et non jusqu'au premier nul. Ce qui te donnera des surprises avec les blobs des SGBD. (et des plantages en C par écrasement de la mémoire)
Quant aux transistors, j'ai construit mon premier ordinateur en 1974 (8bits et 1ko de mémoire!) mais je ne fais confiance qu'aux ingénieurs des grandes marques pour mes PC.
Au même titre que je ne fais pas confiance à 8 compilateurs sur 10 en C.
Pour la petite histoire, je ne fais plus confiance à delphi depuis le passage à DotNet.
Je n'ai plus fait de mise à jour depuis D6 Entreprise.
Bien cordialement.
Dominique

Commentaire de Caribensila le 01/03/2010 01:34:29

Christophe67 nous a dit qu'il était débutant sur Delphi.
Et son source est bien classé dans "débutant".


C'est, je trouve, du bon travail pour un débutant et surtout une approche intelligente de la programmation car il n'a pas voulu avoir fini avant de commencer.

Quant à ton incompatibilité d'humeur avec D6, DEFIS91, on s'en tape et, perso, je te conseillerais un recyclage complet pour que tu puisses nous parler du Delphi actuel qui gère l'unicode et pas d'anciennes batailles du temps jadis.
Tu n'es peut-être pas prétentieux, mais tu fais bougrement figure d'ancien combattant sur ce coup !  ;)



Commentaire de defis91 le 01/03/2010 02:14:58

OK,
Je ne cherchais pas la polémique.
Si j'ai abandonné DotNet (après avoir développé dessus, 3 mois), c'est à cause de la lourdeur et des énormes bugs en charge.
Mais effectivement ce n'est pas le sujet.
Cela dit je pensais que mes remarques étaient utiles pour un débutant.
Pour l'ancien combattant, pas encore tout à fait, je développe encore 12 à 16h par jour dont 50% sur Delphi.
Merci pour les échanges
A+
Dom

Commentaire de Christophe67 le 01/03/2010 13:14:05

Bonjour à tous,

Personnellement je ne cherche pas à déclencher de polémiques, j'ai juste l'envie de placer des sources pour débutants car cela fait moi même 8j que je fais connaissance avec Delphi.
Je prends toutes remarques comme constructive à partir du moment ou elle m'aidera à progresser ou m'améliorer.
J'ai pour seule prétention d'essayer de mettre en ligne des sources pour débutants comme j'aurai aimé en trouver pour débuter.

Bonne programmation à tous ;)

Commentaire de aroslide le 08/03/2010 20:27:27

moi n'aime bien le commentaire de Bacterius c'est si bien dit ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Pb Ressources système [ par ogizmo ] Bonjour à tous,Je suis en cours de création d'une appli, mais depuis peu, après avoir fermé mon appli, les ressources systèmes de mon PC s'écroule pet Message du système [ par Bruto ] J'ai consulté le tutoriel sur le message dans la rubrique Tutoriaux mais il ne me montre pas comment capter un message du système.Avec la façon citée, Résolution d'un Système à plusieurs équetions et plusieurs inconnus [ par ryadus ] Salut;est ce que quelqu'un aurait-it un moyen de pour résoudre un systéme comportant plusieurs équetions et plusieurs inconnus;merci, Variable d'environnement [ par jep93 ] Mon problème est de modifier par programme une variable d'environnement définie au niveau système. Ce que je sais :Lors de l'activation d'un program Le bureau de windows [ par norton ] Bonsoir a tous ...J'avais vu dans labo(projets communs) que des presonnes avait essayer de faire un système d'exploitation.Moi j'aimerais savoir comme Extraire des RAR Multi-Volumes [ par SiZiOUS ] Voila j'aimerai bien spécifier l'emplacement du prochain fichier à unpacker, mais c'est impossible! Le compo est DFUnRar, mais j'ai aussi dRar. Ca foi Interface utilisateur [ par racing66 ] Bonjour.voilà je cherche un moyen de créer un système de navigation pour l'utilisateur qui ressemble au système d'emule.Je m'explique, j'aimerais que Système de fichier Win32 [ par SouthGuy ] BonjourJe voudrais savoir si sous Windows XP il existe une API permettant d'être prévenu (callback ?) an cas de création/modification/suppression d'un répertoire système [ par Awaking ] Certains diront que j'ai mal cherché mais je n'ai pas trouvé de source permertant de connaître le répertoire système de window comme C:\window\system3 Créer des raccourcis système ? [ par f6dqm1 ] BonjourJe me pose la question de savoir si avec Windows (9X ou +) on peut cr&#233;er un raccourci syst&#232;me qui entre automatiquement dans un champ


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,997 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales