15/10/22 13:47
Carlo
Fai una domanda specifica, accodarsi ad un post del 2018 non è indicato.
Negli HDD c'è il seriale dell'hardware e i seriali delle partizioni.
Win ha l'apposita API, contenuta in kernel32.dll: GetVolumeInformationA GetVolumeInformation
I linguaggi in .Net hanno le istruzioni apposite.
Con alcune configurazioni hardware e/o restrizioni, il seriale non si raggiunge
Negli HDD c'è il seriale dell'hardware e i seriali delle partizioni.
Win ha l'apposita API, contenuta in kernel32.dll: GetVolumeInformationA GetVolumeInformation
I linguaggi in .Net hanno le istruzioni apposite.
Con alcune configurazioni hardware e/o restrizioni, il seriale non si raggiunge
Ultima modifica effettuata da Carlo 15/10/22 13:55
in programmazione tutto è permesso
15/10/22 19:17
No, quella API non restituisce il seriale hardware ma solo il seriale del volume che è un'altra cosa.
Puoi usare WMI per il seriale hw
Puoi usare WMI per il seriale hw
16/10/22 0:02
Carlo
Ciao nessuno, rischiamo di parlare tra noi, ma a qualcuno petrebbe interessare.
Usare l'API in Kernel32.dll, funziona per il seriale degli HDD su XP o precedenti S.O.
@paolomi
Con System.Management, si può sapere tutto quello che vuoi.
Metti una listbox nel form:
EDIT
Se il seriale è in esadecimale, nella conversione in CHAR le coppie dei caratteri devono essere inverite. Codice corretto.
Usare l'API in Kernel32.dll, funziona per il seriale degli HDD su XP o precedenti S.O.
@paolomi
Con System.Management, si può sapere tutto quello che vuoi.
Metti una listbox nel form:
using System; using System.Management; // aggiungere Riferimento assembly System.Management.dll using System.Windows.Forms; namespace HD_serial { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ManagementObjectSearcher CercaHD = new ManagementObjectSearcher("select * from " + "Win32_DiskDrive"); try { foreach (ManagementObject HD in CercaHD.Get()) { try { listBox1.Items.Add(HD["Name"]); } catch { listBox1.Items.Add(HD.ToString()); } if (HD.Properties.Count <= 0) { MessageBox.Show("Non trovo HDD", "Messaggio",MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string Seriale = HD.Properties["SerialNumber"].Value.ToString(); string SerialeCHAR = ""; bool Esadecimale = true; for (int i = 0; i<Seriale.Length; i+=4) { try { SerialeCHAR += Convert.ToChar(Convert.ToInt32(Seriale.Substring(i+2, 2), 16)); SerialeCHAR += Convert.ToChar(Convert.ToInt32(Seriale.Substring(i, 2), 16)); } catch { Esadecimale = false; } } if (Esadecimale) { listBox1.Items.Add("serialeHEX: " + Seriale); listBox1.Items.Add("serialeCHAR: " + SerialeCHAR.Trim()); } else { listBox1.Items.Add("seriale: " + Seriale); } listBox1.Items.Add(""); } } catch (Exception er) { MessageBox.Show("ERRORE \n" + er.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }
EDIT
Se il seriale è in esadecimale, nella conversione in CHAR le coppie dei caratteri devono essere inverite. Codice corretto.
Ultima modifica effettuata da Carlo 17/10/22 12:40
in programmazione tutto è permesso