IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Système
        Comment obtenir la version du .NET Framework en cours ?
        Comment déterminer le système d'exploitation de la machine sur laquelle s'exécute le programme ?
        Comment connaître le nombre de processeurs que possède la machine ?
        Comment déterminer le mode de démarrage de la machine ?
        Comment obtenir le répertoire système ?
        Comment obtenir les chemins des répertoires spéciaux comme 'Mes Documents' ?
        Comment tester si l'utilisateur de la session fait partie du groupe d'un domaine ?
        Comment obtenir le nom de la machine ?
        Comment obtenir le nom de l'utilisateur dont la session est en cours ?
        Comment obtenir la quantité de mémoire physique allouée à mon application ?
        Comment obtenir la liste des lecteurs logiques ?
        Comment connaître le format de fichiers d'un disque dur ?
         Comment connaître le pourcentage d'espace libre de vos disques durs ?
        Comment modifier le label d'un disque dur ?
        Comment détecter s'il y a un cd/dvd dans un lecteur ?
        Comment obtenir les informations d'un disque ?
        Comment récupérer l'analyse du taux de défragmentation d'un disque dur ?
        Obtenir la description d'une extension, comme dans l'explorateur de Windows ?
        Comment lancer un processus ?
        Comment ouvrir un fichier avec l'application associée à son extension ?
        Comment rediriger la sortie standard d'un processus ?
        Comment lister les processus en cours d'exécution ?
        Comment arrêter un processus ?
        Comment écrire dans le journal d'évènements de Windows ?
        Comment émettre un bip dans un programme ?
        Un outil de génération de commandes WMI



Comment obtenir la version du .NET Framework en cours ?
auteur : abelman
On utilise la propriété Version de la classe System.Environment.

          
	// Version du framework
	Version ver = Environment.Version;
	Console.WriteLine("Version Framework = {0}", ver);

        
lien : fr System.Environment (MSDN)
lien : fr System.Version (MSDN)

Comment déterminer le système d'exploitation de la machine sur laquelle s'exécute le programme ?
auteur : cardi

Grâce à la propriété OSVersion de la classe Environment, il est possible de connaître la version de l'OS qui exécute l'application :



          
      switch (Environment.OSVersion.Platform)
      {
          case PlatformID.Win32NT: 
              if (Environment.OSVersion.Version.Major == 5)
              {
                  if (Environment.OSVersion.Version.Minor == 1)
                      Console.WriteLine("Windows XP");
                  else if (Environment.OSVersion.Version.Minor == 0)
                      Console.WriteLine("Windows 2000");
                  else
                      Console.WriteLine("Windows ???");
              }
              else
                  Console.WriteLine("Windows NT");
              break;
          case PlatformID.Win32Windows:
              Console.WriteLine("Windows 98 ou Me");
              break;
          case PlatformID.WinCE:
              Console.WriteLine("Windows Mobile");
              break;
          case PlatformID.Unix: 
              // ... Oui oui Unix :)
              Console.WriteLine("Windows Unix");
              break;
          default:
              Console.WriteLine("Autre...");
              break;
      }
      
        
lien : fr System.Environment.OSVersion (MSDN)

Comment connaître le nombre de processeurs que possède la machine ?
auteur : cardi
On utilise la propriété ProcessorCount de la classe System.Environment :

          
      // Nombre de processeurs de la machine
      int countProc = Environment.ProcessorCount;
      Console.WriteLine("Nombre processeurs = {0}", countProc);
      
        
lien : fr System.Environment (MSDN)

Comment déterminer le mode de démarrage de la machine ?
auteur : cardi
On utilise la propriété BootMode de la classe SystemInformation. On obtient une des valeurs de l'énumération BootMode : FailSafe, FaileSafeWithNetwork ou Normal.

          
      // Mode de démarrage de la machine
      switch (SystemInformation.BootMode)
      { 
          case BootMode.Normal: Console.WriteLine("Tout est ok !"); break;
          case BootMode.FailSafe: Console.WriteLine("Attention, on est en mode sans echec !"); break;
          case BootMode.FailSafeWithNetwork: Console.WriteLine("Attention, on est en mode sans échec mais on a accès au réseau !"); break;
      }
      
        
lien : fr System.Windows.Forms.SystemInformation (MSDN)

Comment obtenir le répertoire système ?
auteur : abelman
On utilise la propriété SystemDirectory de la classe Environment

          
	// Repertoire systeme
	Console.WriteLine("Répertoire système = {0}", Environment.SystemDirectory);

        
lien : fr System.Environment (MSDN)

Comment obtenir les chemins des répertoires spéciaux comme "Mes Documents" ?
auteur : abelman
On utilise la fonction GetFolderPath de la classe Environment avec l'énumération Environment.SpecialFolder

          
        static void PrintSpecFolder()
        {
            // Répertoire spéciaux
            Console.WriteLine("Répertoire spéciaux");
            Environment.SpecialFolder[] sfe = (Environment.SpecialFolder[])
            Enum.GetValues(typeof(Environment.SpecialFolder));
            for (int i = 0; i < sfe.Length; i++)
                Console.WriteLine(Environment.GetFolderPath(sfe[i]));
        }

        
lien : fr System.Environment (MSDN)

Comment tester si l'utilisateur de la session fait partie du groupe d'un domaine ?
auteur : cardi
On utilisera la méthode IsInRole de la classe WindowsPrincipal afin de déterminer si l'utilisateur courant fait bien partie ou pas d'un groupe x du domaine auquel il est rattaché :

          
      // Vérification si un utilisateur appartient à un groupe de domaine donné
      WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent());

      if (wp.IsInRole("Developpez\\Moderateur") == true)
          Console.WriteLine("L'utilisateur fait bien partie du groupe Developpez\\Moderateur");
      else
          Console.WriteLine("L'utilisateur ne fait pas partie du groupe Developpez\\Moderateur");
      
        
lien : fr System.Security.Principal.WindowsPrincipal (MSDN)

Comment obtenir le nom de la machine ?
auteur : cardi
On utilise la propriété MachineName de la classe System.Environment :

          
      // Nom de la machine
      string MachineName = Environment.MachineName;
      Console.WriteLine("Nom de la machine = {0}", MachineName);
      
        
lien : fr System.Environment (MSDN)

Comment obtenir le nom de l'utilisateur dont la session est en cours ?
auteur : abelman
On utilise la propriété UserName de la classe Environment

          
	Console.WriteLine("Nom utilisateur = {0}", Environment.UserName);

        
lien : fr System.Environment (MSDN)

Comment obtenir la quantité de mémoire physique allouée à mon application ?
auteur : abelman
On utilise la propriété WorkingSet de la classe Environment

          
	Console.WriteLine("Mémoire allouée au process en cours = {0} octets",
	Environment.WorkingSet);

        
lien : fr System.Environment (MSDN)

Comment obtenir la liste des lecteurs logiques ?
auteur : abelman
On utilise la fonction GetLogicalDrives de la classe Environment

          
        static void PrintLogicalDrives()
        {
            // Lecteurs logiques
            Console.WriteLine("Lecteurs logiques");
            string[] drives = Environment.GetLogicalDrives();
            for (int i = 0; i < drives.Length; i++)
                Console.WriteLine(drives[i]);
        }

        
lien : fr System.Environment (MSDN)

Comment connaître le format de fichiers d'un disque dur ?
auteur : cardi
La classe DriveInfo (pouvant représenter un disque dur si sa propriété DriveType est à Fixed) possède la propriété DriveFormat pour connaître le format de fichiers du disque en question :

          
System.IO.DriveInfo[] mesDrives = System.IO.DriveInfo.GetDrives();

foreach (DriveInfo Drive in mesDrives)
{
if (Drive.DriveType == DriveType.Fixed)
Console.WriteLine("Format du Drive {0} : {1}", Drive.Name, Drive.DriveFormat.ToString());
}
        

Comment connaître le pourcentage d'espace libre de vos disques durs ?
auteur : cardi
La classe DriveInfo peut nous donner les informations nécessaires afin de calculer le pourcentage d'espace libre de chaque disque dur :

          
      // Parcours de la liste des disques durs
      foreach (DriveInfo CurrentDrive in DriveInfo.GetDrives())
      {
          // Vérification qu'on a bien affaire à un disque dur de l'ordinateur
          if (CurrentDrive.DriveType == DriveType.Fixed)
          {
              // Calcul du pourcentage d'espace disque libre
              Double pourcentageLibre = ((Double)CurrentDrive.AvailableFreeSpace / CurrentDrive.TotalSize) * 100;

              Console.WriteLine("Espace libre de {0} >> {1}%", CurrentDrive.Name, Convert.ToInt16(pourcentageLibre));
          }
      }
      
        
lien : fr System.IO.DriveInfo (MSDN)

Comment modifier le label d'un disque dur ?
auteurs : cardi, tomlev
La classe DriveInfo possède la propriété VolumeLabel en lecture et écriture afin de modifier le nom du disque dur en question :

          
DriveInfo monDrive = new DriveInfo(@"C:\");
monDrive.VolumeLabel = "Mon Drive";
        
Attention, cette opération requiert les privilèges d'administrateur. Si l'application s'exécute sous Windows Vista ou Seven sans les privilèges d'administrateur, cette opération lèvera une exception.


Comment détecter s'il y a un cd/dvd dans un lecteur ?
auteur : cardi
On utilise la classe DriveInfo qui fournit des informations concernant entre autres des informations concernant les lecteurs CD/DVD :

          
      String monDrive = "D:/";

      try
      {
          DriveInfo monDriveInfo = new DriveInfo(monDrive);

          // Vérification qu'on a bien affaire à un lecteur CD/DVD
          if (monDriveInfo.DriveType == DriveType.CDRom)
          {
              // Vérification si il y a un cd dans le lecteur
              if (monDriveInfo.IsReady == true)
              {
                  Console.WriteLine("Lecteur identifié avec CD : {0}", monDriveInfo.VolumeLabel);
              }
              else
              {
                  Console.WriteLine("Lecteur identifié sans CD : {0}", monDriveInfo.Name);
              }
          }
          else
          {
              Console.WriteLine("Ce lecteur n'est pas un lecteur CD/DVD !");
          }
      }
      catch (Exception)
      {
          Console.WriteLine("Ceci n'est pas un lecteur !");
      }
      
        

Comment obtenir les informations d'un disque ?
auteurs : Merlin, tomlev
Pour obtenir des informations détaillées sur un disque, il faut utiliser WMI (Windows Management Instrumentation). Il faudra tout d'abord ajouter une référence à l'assembly System.Management. Pour récupérer une valeur, il faudra utiliser la méthode GetPropertyValue associée à un nom de propriété. L'exemple suivant commence par lister toutes les propriétés existantes puis récupère la valeur de la propriété VolumeSerialNumber.

          
			using System.Management;
			...

			// Récupère le disque C:
            ManagementObject disque = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
            disque.Get();

            //Afficher toutes les propriétés du disque
            string strProp = "";
            foreach (PropertyData d in disque.Properties)
            {
                strProp += string.Format("{0} : {1}\n", d.Name, disque.GetPropertyValue(d.Name));
            }
            MessageBox.Show(strProp);

            //Obtenir une propriété en particulier
            strProp = disque.GetPropertyValue("VolumeSerialNumber").ToString();
            MessageBox.Show(" série volume : " + strProp);

        

Comment récupérer l'analyse du taux de défragmentation d'un disque dur ?
auteurs : fayoul, cardi
La commande defrag c: -a permet de lancer l'analyse sur le disque dur C. Il suffit donc d'exécuter cette commande avec la classe Process et de récupérer la sortie standard.

          
      Process p = null;
      try
      {
          p = new Process();
          p.StartInfo.UseShellExecute = false;
          p.StartInfo.RedirectStandardOutput = true;
          p.StartInfo.FileName = "defrag";
          p.StartInfo.Arguments = "c: -a";
          p.Start();
          if (p.WaitForExit(60 * 1000))
          {
              MessageBox.Show(p.StandardOutput.ReadToEnd(), "StandardOutput");
              p.Dispose();
              p = null;
          }
      }
      catch (Exception exc)
      {
          MessageBox.Show(exc.Message, "Exception");
      }
      finally
      {
          if (p != null)
          {
              if (p.HasExited)
                  p.Kill();

              p.Dispose();
              p = null;
          }
      }
      
        

Obtenir la description d'une extension, comme dans l'explorateur de Windows ?
auteur : smyley
Il faut rajouter dans les usings

          
using Microsoft.Win32;

        
et voici le code :

          
public string AGetExtentionDescription(string ext)
{
    string description = GetExtentionDescription(ext);
    if (description == null || description == "")
        return String.Format("Fichier {0}", ext);
    else
        return description;
}

public string GetExtentionDescription(string ext)
{
    if (ext == null || ext == "" || ext == ".")
        return null;

    string description = "";

    try
    {
        RegistryKey keyDesc = Registry.ClassesRoot.OpenSubKey(ext, false);
        if (keyDesc == null)
            return null;
        else
        {
            try
            {
                if (keyDesc.GetValueKind("") != RegistryValueKind.String)
                    return null;
                else
                {
                    description = keyDesc.GetValue("") as string;
                    if (description == null || description == "")
                        return null;

                    RegistryKey optionnalRedirection = Registry.ClassesRoot.OpenSubKey(description, false);
                    if (optionnalRedirection == null)
                        return description;
                    else
                    {
                        try
                        {
                            if (optionnalRedirection.GetValueKind("") != RegistryValueKind.String)
                                return description;
                            else
                                return optionnalRedirection.GetValue("") as string;
                        }
                        finally
                        {
                            if (optionnalRedirection != null)
                                optionnalRedirection.Close();
                        }
                    }

                }

            }
            finally
            {
                if (keyDesc != null)
                    keyDesc.Close();
            }
        }

    }
    catch
    {
        return null;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(AGetExtentionDescription(".exe"));
    MessageBox.Show(AGetExtentionDescription(".jpg"));
    MessageBox.Show(AGetExtentionDescription(".dat"));
    MessageBox.Show(AGetExtentionDescription(".iso"));
    MessageBox.Show(AGetExtentionDescription(".bmp"));
}

        

Comment lancer un processus ?
auteurs : abelman, freegreg
Pour lancer un processus depuis notre application, on utilise la classe System.Diagnostics.Process
Exemple : lancer une instance de internet explorer qui ouvre www.developpez.com

          
        void StartProcess()
        {
            // Instance de la classe Process
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            // Nom de l'executable à lancer
            proc.StartInfo.FileName = "iexplore.exe";
            // Arguments à passer à l'exécutable à lancer
            proc.StartInfo.Arguments = "http://www.developpez.com";
            // Démarrage du processus
            proc.Start();
            // On libère les ressources dont on n'a plus besoin.
            proc.Close(); // Attention Close ne met pas fin au processus.
        }

        
lien : fr System.Diagnostics.Process (MSDN)

Comment ouvrir un fichier avec l'application associée à son extension ?
auteur : abelman
On peut ouvrir des documents dont l'extension est connue du shell windows comme les .txt ou les .doc avec
la classe System.Diagnostics.Process
Exemple : Ouverture d'un fichier texte .txt.

          
        void StartProcess()
        {
            // Instance de la classe Process
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            // Nom du fichier dont l'extension est connue du shell à ouvrir
            proc.StartInfo.FileName = "monfichier.txt";
            // Démarrage du processus.
            // Notepad, si il est associé aux fichiers .txt,
            // sera lancé et ouvrira le fichier monfichier.txt
            proc.Start();
            // On libère les ressources dont on a plus besoin.
            proc.Close(); // Attention Close ne met pas fin au processus.
        }

        
lien : fr System.Diagnostics.Process (MSDN)

Comment rediriger la sortie standard d'un processus ?
auteurs : abelman, tomlev
Il est possible de rediriger la sortie standard d'un processus pour effectuer un traitement dessus où l'afficher. Il faut pour cela utiliser la propriété RedirectStandardOutput.

          
        static void RedirectStdOutput()
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            // On désactive le shell
            proc.StartInfo.UseShellExecute = false;
            // On redirige la sortie standard
            proc.StartInfo.RedirectStandardOutput = true;
            // On définit la commande
            proc.StartInfo.FileName = "mem.exe";
            // Démarrage de la commande
            proc.Start();
            // Lecture de la sortie de la commande
            string output = proc.StandardOutput.ReadToEnd();
            Console.WriteLine(output);
            // Attente de la fin de la commande
            proc.WaitForExit();
            // Libération des ressources
            proc.Close();
        }

        
lien : fr System.Diagnostics.Process (MSDN)

Comment lister les processus en cours d'exécution ?
auteur : abelman
Pour lister les processus en cours on utilise la fonction

          
	using System.Diagnostics;
	//...
	
	// Pour tous les processus en cours sur l'ordinateur local
	Process[] prc  = Process.GetProcesses();
	// Pour tous les processus notepad en cours sur l'ordinateur local
	Process[] prc = Process.GetProcessesByName("notepad");

        
lien : fr System.Diagnostics.Process (MSDN)

Comment arrêter un processus ?
auteur : abelman
Pour arrêter un processus, il faut disposer d'un objet System.Diagnostics.Process qui représente le processus.

          
	// Pour les applications consoles
	proc.Kill();
	// Libération des ressources
	proc.Close();

        
Pour les applications WinForm il est préférable d'utiliser CloseMainWindow afin que l'application
reçoive le message de fermeture et se ferme correctement.

          
	// Pour les applications avec une interface graphique (et donc une pompe de messages)
	// Si l'appel échoue, on peut alors forcer la fermeture avec Kill.
	proc.CloseMainWindow();
	// Libération des ressources
	proc.Close();

        
lien : fr System.Diagnostics.Process (MSDN)

Comment écrire dans le journal d'évènements de Windows ?
auteurs : neguib, neo.51, tomlev
Tout simplement en utilisant les fonctionnalités offertes par l'espace de noms System.Diagnostics, notamment la classe EventLog et sa méthode WriteEntry qui dispose d'une dizaine de surcharges.

Il faut tout d'abord créer une instance de EventLog, et la source d'évènement associée si elle n'existe pas :

          
using System.Diagnostics;

    ...
	if (!EventLog.SourceExists("MaSource"))
	{
		EventLog.CreateEventSource("MaSource", "MonJournal");
	}
	EventLog monJournal = new EventLog();
	monJournal.Source = "MaSource";


        
Notez que la méthode CreateEventSource requiert les privilèges d'administrateur, il est donc préférable de créer le source d'évènement lors de l'installation.

On peut ensuite utiliser notre EventLog pour logger une exception, par exemple :

          
try
{
	//instructions à exécuter;
}
catch(Exception ex)
{
	// écrire l'erreur
	monJournal.WriteEntry(ex.Message, EventLogEntryType.Error);
}
					
        
lien : fr System.Diagnostics.EventLog (MSDN)
lien : fr Méthode EventLog.WriteEntry (MSDN)
lien : fr System.Diagnostics.EventLogEntryType (MSDN)

Comment émettre un bip dans un programme ?
auteur : cardi
Pour émettre un bip avec le haut-parleur de la machine, il suffit d'utiliser la méthode Beep de la classe Console :

          
      // Emet un simple bip
      Console.Beep();

      // Emet un bip à la fréquence 15000Hz pendant 2 secondes
      // A noter que la gamme audible de l'oreille humaine va de 16 à 20000Hz
      Console.Beep(15000, 2000);
      
        

Un outil de génération de commandes WMI
auteur : Laurent Dardenne
WMI est utilisé pour accomplir différentes tâches d'administration système au travers de scripts ou requêtes WQL.

L'outil WMICodeCreator permet de générer le code source pour :

  • l'accès à une classe WMI ou à une de ses propriétés ;
  • l'exécution de méthodes d'une classe WMI ;
  • la réception d'évènements synchrones ou asynchrones issus d'un provider WMI.
Cet outil permet également de récupérer les détails d'une classe WMI : la liste des propriétés, méthodes et qualificateurs et pour certaines une description succincte de la classe.

Le code source généré peut l'être pour les langages C#, VB .NET ou encore VBScript.

Sous .NET reportez-vous aux espaces de noms System.Management et System.Management.Instrumentation.




Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.