Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/csharp-rilevare-informazioni-del-disco-rigido-del-proprio-pc-dotnet-10
In questo articolo vedremo come estrapolare informazioni del nostro computer, in particolare per conoscere dati importanti riguardante il nostro hard disk o SSD.
Senza l’utilizzo di librerie di terze parti, scopriremo tramite la classe “ManagementObjectSearcher” informazioni che ci possono tornare utile sulla memoria del computer.
Il progetto sarà di tipo Windows forms con il linguaggio di programmazione C#, tramite l’ambiente di sviluppo “Visual Studio 2026 Community” con l’ultima versione del Framework .Net, nel momento in cui stiamo scrivendo è la 10.
Creazione del progetto
Si crea un nuovo progetto di tipo Windows Application, impostando come versione del Framework la 10, al momento presente solo questa per l’ambiente di sviluppo Visual Studio 2026.
Dopo aver creato il progetto, nella form, aggiungiamo alcuni controlli, in particolare tre controlli Label, un controllo cornice e tre controlli textbox, il tutto come mostrato in figura 1.
C#
using System.Management;
In una parte qualsiasi della classe form, dopo il costruttore, scriviamo una funzione, che verrà richiamata nell’evento load del form, con il quale rileviamo informazioni del nostro disco, quale modello, numero seriale e lo stato.
Tramite la classe ManagementObjectSearcher, passando nel costruttore la select a “Win32_DiskDrive” che permette di rilevare tutte le informazioni sul disco rigido, tramite il metodo “get” otteniamo uno o più oggetti (in base a quanti sono i dischi sul pc) di tipo “ManagementObject”, con il quale abbiamo informazioni sul disco.
Di seguito si riporta il frammento di codice delle suddette operazioni.
C#
private void GetInformazioniMemoriaSSDHardkisk()
{
try
{
ManagementObjectSearcher mosDiskDrive = new ManagementObjectSearcher("SELECT
* FROM Win32_DiskDrive");
foreach (ManagementObject disco in mosDiskDrive.Get())
{
string modello = disco["Model"]?.ToString() ?? "N/A";
string numeroSeriale = disco["SerialNumber"]?.ToString() ?? "N/A";
string stato = disco["Status"]?.ToString() ?? "N/A";
txtModello.Text += modello+ "\r\n" ;
txtNumeroSeriale.Text += numeroSeriale +"\r\n";
txtStato.Text += stato+ "\r\n";
}
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}
Passiamo in visualizzazione grafica e facciamo click in ogni parte della form, in modo che passiamo in visualizzazione codice dell’evento load della form. In questo metodo viene invocato la funzione appena creata, di seguito si riporta il frammento di codice.
C#
private void FrmInformazioniPC_Load(object sender, EventArgs e)
{
GetInformazioniMemoriaSSDHardkisk();
}
Nel caso che vogliamo sapere la capacità del disco, tramite la proprietà size possiamo rilevare tale dato.
Di seguito si riporta una funzione, che restituisce la dimensione e riportando in forma abbreviato l'unità di misura (Gigabyte o terabyte).
C#
string GetSpazioTotale(ulong dimensione)
{
string spazioTotale;
if (dimensione != 0)
{
try
{
ulong sizeBytes = Convert.ToUInt64(dimensione);
double sizeGB = sizeBytes / (1024.0 * 1024.0 * 1024.0);
if (sizeGB >= 1000.0)
{
double sizeTB = sizeGB / 1024.0;
spazioTotale = $"{sizeTB:F2} TB";
}
else
{
spazioTotale = $"{sizeGB:F2} GB";
}
}
catch
{
spazioTotale = "N/A";
}
}
else
{
spazioTotale = "N/A";
}
return spazioTotale;
}
Ora non resterà che modificare la nostra funzione, aggiungendo la riga di codice per richiamare questa funzione.
Di seguito si riporta la riga modifica.
C#
string spazioTotale = disco["Size"] != null ? GetSpazioTotale(Convert.ToUInt64(disco["Size"])) : "N/A";
Di seguito si riporta la funzione completa con la nuova modifica.
C#
private void GetInformazioniMemoriaSSDHardkisk()
{
try
{
ManagementObjectSearcher mosDiskDrive = new ManagementObjectSearcher("SELECT
* FROM Win32_DiskDrive");
foreach (ManagementObject disco in mosDiskDrive.Get())
{
string modello = disco["Model"]?.ToString() ?? "N/A";
string numeroSeriale = disco["SerialNumber"]?.ToString() ?? "N/A";
string stato = disco["Status"]?.ToString() ?? "N/A";
string spazioTotale = disco["Size"] != null ? GetSpazioTotale(Convert.ToUInt64(disco["Size"])) : "N/A";
txtModello.Text += modello + "\r\n";
txtNumeroSeriale.Text += numeroSeriale + "\r\n";
txtStato.Text += stato + "\r\n";
}
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}
Nel caso che desideriamo conoscere tutte le proprietà di “Win32_DiskDrive”, potremmo effettuare una ricerca tra tutti gli elementi, e rilevare l’eventuale valore per ciascuno.
Il ciclo avviene nella proprietà “Proprties” dell’oggetto ManagamentObject con il quale estrapoliamo il nome ed il valore della proprietà.
Di seguito si riporta una funzione che estrapola tutti gli elementi con i relativi valori e li visualizza a video.
C#
private void VisualizzaTutteProprieta()
{
var MOsearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject elemento in MOsearcher.Get())
{
var sb = new StringBuilder();
sb.AppendLine("Proprietà disponibili per
Win32_PhysicalMedia:");
foreach (PropertyData prop in elemento.Properties)
{
string name = prop.Name;
string value;
try
{
value = prop.Value?.ToString() ?? "<null>";
}
catch (Exception ex)
{
value = $"<errore
lettura: {ex.Message}>";
}
sb.AppendLine($"{name}: {value}");
}
MessageBox.Show(sb.ToString(), "Win32_PhysicalMedia");
}
}
Possiamo richiamare la funzione nell’evento load della form, di seguito il frammento di codice delle suddette operazioni.
C#
private void FrmInformazioniPC_Load(object sender, EventArgs e)
{
VisualizzaTutteProprieta();
GetInformazioniMemoriaSSDHardkisk();
}
Conclusioni
L’articolo ha fornito al lettore istruzioni su come rilevare le informazioni del proprio pc, in un progetto di tipo Windows Application, con il linguaggio di programmazione C#. Tramite le varie classi presenti nello spazio dei nomi “System.Management”, possiamo rilevare informazioni utili sulle varie componenti sistema operativo Windows, in questo caso del disco rigido. Diversi gli scenari che si aprono come la realizzazione di applicazioni informativi sull’hardware o per gestire i progetti estrapolando informazioni sull’hardware, come per esempio rilevare il seriale del disco rigido, per una gestione delle licenze più rigida e mirata.


Nessun commento:
Posta un commento