begin process at 2010 02 10 01:09:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > UTILISATION WMI ET WIN32_LOGICALDISK

UTILISATION WMI ET WIN32_LOGICALDISK


 Information sur la source

 Description

Ce bout de code permet de récupérer diverses informations sur les disques durs d'un PC, vi WMI et la classe Win32_LogicalDisk.
Par exemple, il affiche la capacité totale du disque, l'espace utilisé et l'espace libre restant.

De plus, j'ai rajouté l'utilisation de la méthode ScheduleAutoChk.
Pour plus d'informations sur cette classe et cette méthode, je vous conseille la fantastique MSDN.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Collections;
  • using System.Text;
  • using System.Management;
  • namespace Win32_LogicalDisk
  • {
  • class LogicalDisk
  • {
  • #region CONSTANTES
  • const ulong GIGA_OCTETS = 1 << 30;
  • const ulong MEGA_OCTETS = 1 << 20;
  • const ulong KILO_OCTETS = 1 << 10;
  • #endregion
  • static void Main(string[] args)
  • {
  • #region BLOC_TRY
  • try
  • {
  • ManagementPath mgmtPath = new ManagementPath("Win32_LogicalDisk");
  • ManagementClass classObj = new ManagementClass(null, mgmtPath, null);
  • ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(@"SELECT Name, FreeSpace, Size, VolumeName
  • FROM Win32_LogicalDisk
  • WHERE DriveType=3");
  • ManagementObjectCollection objCollection = objSearcher.Get();
  • #region VARIABLES_ENVIRONNEMENT
  • int i = 0; //
  • Hashtable freeSpace = new Hashtable(); // Variables
  • Hashtable useSpace = new Hashtable(); // d'environnement
  • Hashtable capacity = new Hashtable(); //
  • string[] sLogicalDisk = new string[objCollection.Count]; // Tableau de 'string' contenant les noms de chaque disque
  • object[] parameters = new object[1]; // ScheduleAutoChk() n'a qu'un seul paramètre
  • #endregion
  • // Parcour de tous les disques logiques présent sur la machine
  • foreach (ManagementObject aObjet in objCollection)
  • {
  • #region INFOS_SAUVEGARDEES
  • // Sauvegarde du nom du disque
  • sLogicalDisk[i] = aObjet["Name"].ToString();
  • freeSpace.Add("octet", Convert.ToUInt64(aObjet["FreeSpace"])); //
  • capacity.Add("octet", Convert.ToUInt64(aObjet["Size"])); // Valeurs en octets
  • useSpace.Add("octet", Convert.ToUInt64(capacity["octet"]) - Convert.ToUInt64(freeSpace["octet"])); //
  • freeSpace.Add("kilo_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / KILO_OCTETS)); //
  • capacity.Add("kilo_octet", (Convert.ToUInt64(aObjet["Size"]) / KILO_OCTETS)); // Valeurs en kilo octets
  • useSpace.Add("kilo_octet", Convert.ToUInt64(capacity["kilo_octet"]) - Convert.ToUInt64(freeSpace["kilo_octet"])); //
  • freeSpace.Add("mega_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / MEGA_OCTETS)); //
  • capacity.Add("mega_octet", (Convert.ToUInt64(aObjet["Size"]) / MEGA_OCTETS)); // Valeurs en mega octets
  • useSpace.Add("mega_octet", Convert.ToUInt64(capacity["mega_octet"]) - Convert.ToUInt64(freeSpace["mega_octet"])); //
  • freeSpace.Add("giga_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / GIGA_OCTETS)); //
  • capacity.Add("giga_octet", (Convert.ToUInt64(aObjet["Size"]) / GIGA_OCTETS)); // Valeurs en giga octets
  • useSpace.Add("giga_octet", Convert.ToUInt64(capacity["giga_octet"]) - Convert.ToUInt64(freeSpace["giga_octet"])); //
  • #endregion
  • #region AFFICHAGE_INFORMATIONS
  • Console.WriteLine("----------------------------START INFORMATION--------------------------------");
  • // Affichage des informations 'essentielles' du disque
  • Console.WriteLine("\n\t\t\t\tName: {0}", aObjet["VolumeName"]);
  • Console.WriteLine(
  • String.Format("\nFreeSpace:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko",
  • freeSpace["giga_octet"], freeSpace["mega_octet"], freeSpace["kilo_octet"], freeSpace["octet"]));
  • Console.WriteLine(
  • String.Format("\nUseSpace:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko",
  • useSpace["giga_octet"], useSpace["mega_octet"], useSpace["kilo_octet"], useSpace["octet"]));
  • Console.WriteLine(
  • String.Format("\nCapacity:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko\n",
  • capacity["giga_octet"], capacity["mega_octet"], capacity["kilo_octet"], capacity["octet"]));
  • #endregion
  • freeSpace.Clear(); //
  • useSpace.Clear(); // on vide les informations
  • capacity.Clear(); //
  • i++;
  • }
  • #region INVOKE_METHOD_ScheduleAutoChk
  • parameters[0] = sLogicalDisk;
  • uint result = Convert.ToUInt32(classObj.InvokeMethod("ScheduleAutoChk", parameters));
  • #endregion
  • #region GESTION_ERREURS
  • // Gestion des différentes erreurs
  • switch (result)
  • {
  • case 0: Console.WriteLine("SUCCESS");
  • break;
  • case 1: Console.WriteLine("ERROR REMOTE DRIVE");
  • break;
  • case 2: Console.WriteLine("ERROR REMOVABLE DRIVE");
  • break;
  • case 3: Console.WriteLine("ERROR DRIVE NO ROOT DIRECTORY");
  • break;
  • case 4: Console.WriteLine("ERROR UNKNOW DRIVE");
  • break;
  • default: Console.WriteLine("ERROR UNKNOW");
  • break;
  • }
  • #endregion
  • Console.ReadKey(true);
  • }
  • #endregion
  • #region BLOC_CATCH
  • catch (ManagementException Ex)
  • {
  • Console.WriteLine(String.Format("\n\nMANAGEMENT EXCEPTION INTERCEPTEE\n\t\t{0}\n\n", Ex.Message));
  • }
  • catch (Exception Ex)
  • {
  • Console.WriteLine(String.Format("\n\nEXCEPTION INTERCEPTEE\n\t\t{0}\n\n", Ex.Message));
  • }
  • #endregion
  • }
  • }
  • }
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Management;

namespace Win32_LogicalDisk
{
    class LogicalDisk
    {
        #region CONSTANTES

        const ulong GIGA_OCTETS = 1 << 30;
        const ulong MEGA_OCTETS = 1 << 20;
        const ulong KILO_OCTETS = 1 << 10;

        #endregion

        static void Main(string[] args)
        {
            #region BLOC_TRY

            try
            {

                ManagementPath mgmtPath = new ManagementPath("Win32_LogicalDisk");
                ManagementClass classObj = new ManagementClass(null, mgmtPath, null);

                ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(@"SELECT Name, FreeSpace, Size, VolumeName
                                                                                      FROM Win32_LogicalDisk 
                                                                                      WHERE DriveType=3");
                ManagementObjectCollection objCollection = objSearcher.Get();

                #region VARIABLES_ENVIRONNEMENT

                int i = 0;                                    //
                Hashtable freeSpace = new Hashtable();        // Variables
                Hashtable useSpace = new Hashtable();         // d'environnement
                Hashtable capacity = new Hashtable();         //

                string[] sLogicalDisk = new string[objCollection.Count];    // Tableau de 'string' contenant les noms de chaque disque
                object[] parameters = new object[1];                        // ScheduleAutoChk() n'a qu'un seul paramètre

                #endregion

                // Parcour de tous les disques logiques présent sur la machine
                foreach (ManagementObject aObjet in objCollection)
                {
                    #region INFOS_SAUVEGARDEES

                    // Sauvegarde du nom du disque
                    sLogicalDisk[i] = aObjet["Name"].ToString();

                    freeSpace.Add("octet", Convert.ToUInt64(aObjet["FreeSpace"]));                                                      //
                    capacity.Add("octet", Convert.ToUInt64(aObjet["Size"]));                                                            // Valeurs en octets
                    useSpace.Add("octet", Convert.ToUInt64(capacity["octet"]) - Convert.ToUInt64(freeSpace["octet"]));                  //

                    freeSpace.Add("kilo_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / KILO_OCTETS));                                 //
                    capacity.Add("kilo_octet", (Convert.ToUInt64(aObjet["Size"]) / KILO_OCTETS));                                       // Valeurs en kilo octets
                    useSpace.Add("kilo_octet", Convert.ToUInt64(capacity["kilo_octet"]) - Convert.ToUInt64(freeSpace["kilo_octet"]));   //

                    freeSpace.Add("mega_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / MEGA_OCTETS));                                 //
                    capacity.Add("mega_octet", (Convert.ToUInt64(aObjet["Size"]) / MEGA_OCTETS));                                       // Valeurs en mega octets
                    useSpace.Add("mega_octet", Convert.ToUInt64(capacity["mega_octet"]) - Convert.ToUInt64(freeSpace["mega_octet"]));   //

                    freeSpace.Add("giga_octet", (Convert.ToUInt64(aObjet["FreeSpace"]) / GIGA_OCTETS));                                 //
                    capacity.Add("giga_octet", (Convert.ToUInt64(aObjet["Size"]) / GIGA_OCTETS));                                       // Valeurs en giga octets
                    useSpace.Add("giga_octet", Convert.ToUInt64(capacity["giga_octet"]) - Convert.ToUInt64(freeSpace["giga_octet"]));   //

                    #endregion

                    #region AFFICHAGE_INFORMATIONS

                    Console.WriteLine("----------------------------START INFORMATION--------------------------------");


                    // Affichage des informations 'essentielles' du disque
                    Console.WriteLine("\n\t\t\t\tName: {0}", aObjet["VolumeName"]);
                    Console.WriteLine(
                        String.Format("\nFreeSpace:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko",
                        freeSpace["giga_octet"], freeSpace["mega_octet"], freeSpace["kilo_octet"], freeSpace["octet"]));
                    Console.WriteLine(
                        String.Format("\nUseSpace:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko",
                        useSpace["giga_octet"], useSpace["mega_octet"], useSpace["kilo_octet"], useSpace["octet"]));
                    Console.WriteLine(
                        String.Format("\nCapacity:\n\t\t{0}Go\n\t\t{1}Mo\n\t\t{2}Ko\n",
                        capacity["giga_octet"], capacity["mega_octet"], capacity["kilo_octet"], capacity["octet"]));

                    #endregion

                    freeSpace.Clear();      //
                    useSpace.Clear();       // on vide les informations
                    capacity.Clear();       //

                    i++;
                }
                
                #region INVOKE_METHOD_ScheduleAutoChk

                parameters[0] = sLogicalDisk;
                uint result = Convert.ToUInt32(classObj.InvokeMethod("ScheduleAutoChk", parameters));

                #endregion

                #region GESTION_ERREURS

                // Gestion des différentes erreurs
                switch (result)
                {
                    case 0: Console.WriteLine("SUCCESS");
                        break;
                    case 1: Console.WriteLine("ERROR REMOTE DRIVE");
                        break;
                    case 2: Console.WriteLine("ERROR REMOVABLE DRIVE");
                        break;
                    case 3: Console.WriteLine("ERROR DRIVE NO ROOT DIRECTORY");
                        break;
                    case 4: Console.WriteLine("ERROR UNKNOW DRIVE");
                        break;
                    default: Console.WriteLine("ERROR UNKNOW");
                        break;
                }

                #endregion

                Console.ReadKey(true);
            }

            #endregion

            #region BLOC_CATCH

            catch (ManagementException Ex)
            {
                Console.WriteLine(String.Format("\n\nMANAGEMENT EXCEPTION INTERCEPTEE\n\t\t{0}\n\n", Ex.Message));
            }
            catch (Exception Ex)
            {
                Console.WriteLine(String.Format("\n\nEXCEPTION INTERCEPTEE\n\t\t{0}\n\n", Ex.Message));
            }

            #endregion
        }
    }
}

 Conclusion

Pour que ce code fonctionne, il vous suffit d'ajouter la référence System.Management


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) CHRONOMETRE + HEURE

 Sources de la même categorie

Source avec Zip PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD par whismeril
Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES) par jray
Source avec Zip Source avec une capture SURVEILLER FICHIERS CRÉÉS AVEC FILESYSTEMWATCHER AMÉLIORÉ par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SAVOIR L'ADRESSE PHYSIQUE (MAC) DES CARTES RÉSEAUX DE L'ORDI... par boutemine
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES IMPRIMANTES - ADDIN POUR WHS par jesusonline
Source avec Zip Source avec une capture Source .NET (Dotnet) QUICK DEPLOY SERVICE par bernie666
Source avec Zip Source .NET (Dotnet) GESTION D'UNE CONNEXION WMI par t_barbillon
Source .NET (Dotnet) FONCTION D'AFFICHAGE DU NOM DU PROCESSEUR AVEC WMI par JuLsupinfo

Commentaires et avis

Commentaire de scoubidou944 le 09/03/2007 00:16:12

hum, je dirais que c'est un peu codé à la 'porcasse'.
Pour être un peu constructif quand même histoire de dire que la critique est facile, voici un bout de code qui affiche dans une listview toutes les unités logiques d'un disque ainsi que tous les attributs associés.

Le code est issu d'une appli' que je suis en train de faire, il faut juste remplacer m_listViewDrives par le nom de sa listview. (je le redis c en cours de dev ;p)

private void FillIHM()
{
ManagementScope mscope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", Environment.MachineName));
ManagementObjectSearcher mos = new ManagementObjectSearcher(mscope, new ObjectQuery("SELECT * FROM Win32_LogicalDisk"));

// Loop on each logical drive
foreach (ManagementObject mo in mos.Get())
{
// Create item in listview for each logical drive
ListViewItem CurrentItem = m_listViewDrives.Items.Add("A");

// Loop on all properties (some of those may be unaccessible so check for each logical drive)
int PropertiesCount = mo.Properties.Count;
foreach (PropertyData pd in mo.Properties)
{
// Property available ?
if (mo[pd.Name] != null)
{
PropertyData CurrentObjet = mo.Properties[pd.Name];
if (CurrentObjet.Value != null)
{
// Create column for new property
ColumnHeader CurrentColumn = m_listViewDrives.Columns[pd.Name];
if (CurrentColumn == null)
{
CurrentColumn = m_listViewDrives.Columns.Add(pd.Name, -2, HorizontalAlignment.Left);
CurrentColumn.Name = pd.Name;
}

// Make a blank lin
int iCurrentColumnsCount = m_listViewDrives.Columns.Count;
for (int i = 1; i < iCurrentColumnsCount; i++)
{
CurrentItem.SubItems.Add(" ");
}

// Replace text
CurrentItem.SubItems[CurrentColumn.Index].Text = mo.Properties[pd.Name].Value.ToString();
}
}
}
}
mos.Dispose();
}

Commentaire de Willi le 11/03/2007 10:46:06 administrateur CS

Avec la classe DriveInfo() c'est pas plus simple ?
De plus tu oublis de libérer tes objets de management (.Dispose())

++ Bonne continuation

Commentaire de scoubidou944 le 11/03/2007 14:15:06

Argh, pourtant j'ai horreur de réinventer la poudre ;p

Merci pour l'oubli
et re merci pour le wrapper DriveInfo ;p

Commentaire de scoubidou944 le 20/03/2007 19:31:23

je précise juste que DriveInfo c'est en .NET 2.0

voici le lien Krosoft :
http://msdn2.microsoft.com/en-us/library/system.io.driveinfo.aspx

Commentaire de scoubidou944 le 20/03/2007 19:42:04

Autre remarque, DriveInfo renvoie la description en anglais alros que WMI le localise dans la langue de l'OS.
De plus, il manque pas mal d'info à mon goût (dans le cas qui me concerne).

Donc (et à moins d'avoir loupé quelque chose), je vais garder mon exemple (en corrigeant l'erreur) même s'il y a plus de code.

Le débat est ouvert

Commentaire de oualido le 19/06/2007 09:24:25

Merci,

c'est intéressant , par contre

avez vous une idée sur comment on peut faire pour modifier un objet via WMI, sachant que Wql est un langage lecture seule.

merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

WMI [ par coq ] Je me sers de WMI pour d'une part récupérer diverses informations sur les partages (classe Win32_Share) et aussi sur les connexions actuelles de clien Paramètres Proxy IE avec WMI [ par Mac_Fly_ATF ] Bonjour, Voilà, j'essaye de dev une petite appli pour sauvegarder et restorer des configs réseaux grâce a la WMI. J'utilise donc Win32_NetworkAda reseau et WMI [ par zaza42 ] Bonjour!j'essaye de faire un logiciel me permettant de changer l'ip de mes carte reseau ainsi qu'indiquer les serveurs DNS.POur le moment j'arrive a c WMI [ par Bidou ] Bonsoir,Je cherche &#224; savoir combien de temps (d'heure) mon ordi &#224; fonctionner, depuis une certaine date. Je me suis donc diriger du c&#244;t Applet, Process et WMI [ par lazz59 ] Bonjour, J'ai cr&#233;&#233; une applet en .Net C# tel qu'il l'est expliqu&#233; sur ce site&nbsp;: http://fr.gotdotnet.com/quickstart/winforms/doc/Wi WMI : Problème avec la classe Win32_NetworkAdapterConfiguration [ par dysko ] Slt !Je n'arrive pas &#224; r&#233;cup&#233;rer certaines informations de la classe Win32_NetworkAdapterConfiguration....Par exemple l'adresse IP ou WMI - COM object that has been separated from its underlying RCW can not be used. !!!! [ par dysko ] SltJe cr&#233;e une application en C# qui utilise du WMI pour r&#233;cup&#233;rer la configuration mat&#233;rielle et logicielle d'un PC.Sur mon poste version du processeur [ par tmcuh ] Bonjour, pour des besoins de s&#233;curit&#233; logiciel j'ai besoin d'avoir une cl&#233; unique par ordinateur, qui ne soit pas diff&#233;rent d'un l [C#]pb WMI [ par cedkat ] Bonjour,J'ai une classe qui r&#233;cup&#232;re des info sur les disques dur avec WMI. Cela marche tr&#233;s bien en local, mais d&#233;s lors je d&#23 C# / WMI / NLB [ par Diamondduff ] Je cherche &#224; activer/desactiver des noeud NLB &#224; distance via WMI, quelqu'un a t-il deja bosser la dessus?


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,108 sec (3)

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