Home / Programmazione / C# - Asp.NET / Informazioni di sistema con C#
Mattepuffo

Informazioni di sistema con C#

Informazioni di sistema con C#

Torniamo a scrivere un pò di articoli!

Oggi parliamo di come ottenere informazioni di sistema con C#.

Usnado il .NET Framework è possbile ottenere informazioni di sistema in diversi modi.

Io ho usato WMI, e nello specifico le Win 32 classes.

Come potete vedere le classi coprono praticamente qualsiasi esigenza.

Se volessimo ottenere informazioni hardware possiamo usaer le Computer Hardware Classes; come potete vedere c'è di tutto e di più.

Facciamo un esempio con gli Hard Disk:

using System;
using System.Management;

namespace SysInfo
{
    class HardDisk
    {
        public static void query()
        {
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_DiskDrive");
                foreach (ManagementBaseObject mbo in searcher.Get())
                {
                    Console.WriteLine("NAME: {0}", mbo.GetPropertyValue("Name"));
                    Console.WriteLine("MODEL: {0}", mbo.GetPropertyValue("Model"));
                    Console.WriteLine("MEDIA TYPE: {0}", mbo.GetPropertyValue("MediaType"));
                    Console.WriteLine("DESCRIPTION: {0}", mbo.GetPropertyValue("Description"));
                    Console.WriteLine();
                }
            }
            catch (ManagementException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Utilizzando un oggetto ManagedObjectSearcher possiamo interrogare le classi come faremo con un database.

Ogni classe ha tutta una serie di proprietà; in questo caso io ho estrapolato:

  • Name
  • Model
  • MediaType
  • Description

Le proprietà sono ben commentate nella pagina della classe di interesse.

Facciamo un altro esempio prendendo in considerazione il Monitor:

using System;
using System.Management;

namespace SysInfo
{
    class DesktopMonitor
    {
        public static void query()
        {
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_DesktopMonitor");
                foreach (ManagementBaseObject mbo in searcher.Get())
                {
                    Console.WriteLine("NAME: {0}", mbo.GetPropertyValue("Name"));
                    Console.WriteLine("DESCRIPTION: {0}", mbo.GetPropertyValue("Description"));
                    Console.WriteLine("MONITOR TYPE: {0}", mbo.GetPropertyValue("MonitorType"));
                    Console.WriteLine("DISPLAY TYPE: {0}", Convert.ToUInt16(mbo.GetPropertyValue("DisplayType")));
                    Console.WriteLine("SCREEN W: {0}", Convert.ToUInt32(mbo.GetPropertyValue("ScreenWidth")));
                    Console.WriteLine("SCREEN H: {0}", Convert.ToUInt32(mbo.GetPropertyValue("ScreenHeight")));
                    Console.WriteLine();
                }
            }
            catch (ManagementException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Come vedete si usa sempre lo stesso criterio; quello che cambia sono le proprietà.

Ad esempio qua prendo in considerazione anche ScreenWidth e ScreenHeight.

Ovviamente controllate anche di che tipo sono le proprietà; come vedete qua ho dovuto eseguire una conversione nel caso di ScreenWidth e ScreenHeight.

Enjoy!