Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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
 

Commentaires et avis

signaler à un administrateur
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();
}

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.