begin process at 2008 07 20 15:50:36
1 213 292 membres
207 nouveaux aujourd'hui
14 166 membres club

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
  • 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

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS