PDA

View Full Version : [Visual Basic 2010] - Recupero seriale Hard Disk


lucausa75
20-08-2010, 20:06
Salve ragazzi,
sto costruendo un'applicazione che mi rileva il seriale del mio HDD ma c'è un problema; possibile che con VB2010 non è stata implementata alcuna classe che mi permetta di fare ciò?

Questa un porzione di codice ma non rileva il seriale (VB2010) o cmq rileva qualcosa che sembra essere il seriale del volume logico che cambia ad ogni formattazione o spostamento della partizione interessata:

Private Function GetHddID(Optional ByVal strDriveLetter As String = "C") As String

Dim disk As ManagementObject = New ManagementObject(String.Format("win32_logicaldisk.deviceid=""{0}:""", strDriveLetter))
disk.Get()
Return disk("VolumeSerialNumber").ToString()

End Function


mentre questo scritto in VB6 funziona:


Private Sub cmdInfo_Click()
Call IsWMIInstalled
txtHddSN = GetSerialInfo("PhysicalMedia")
End Sub

Quì a seguire trovate un esempio di cio che viene rilevato nel caso di VB6 e VB2010:

http://img641.imageshack.us/img641/4697/20082010212208.th.png (http://img641.imageshack.us/i/20082010212208.png/)



Qualche soluzione?

MarcoGG
20-08-2010, 23:19
Quello che vedo essere il risultato del codice VB6 sembra proprio il seriale fisico dell'hdd, mentre l'altro ha tutta l'aria, come pensi tu, di essere un seriale della partizione.
Non mi soffermo su questa o quella tecnica per rilevare il seriale fisico del drive, perchè ce ne sono un mucchio...

In VB.NET comunque esiste eccome la libreria. Basta referenziare System.Management.
Personalmente proverei con questo semplice giro di istruzioni :

Dim SCR As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
For Each hdd As ManagementObject In SCR.Get()
MessageBox.Show(hdd("SerialNumber"))
Next

ma non è sempre detto che vada a buon fine ( dipende anche dal disco in questione )... ;)

lucausa75
21-08-2010, 07:44
Quello che vedo essere il risultato del codice VB6 sembra proprio il seriale fisico dell'hdd, mentre l'altro ha tutta l'aria, come pensi tu, di essere un seriale della partizione.
Non mi soffermo su questa o quella tecnica per rilevare il seriale fisico del drive, perchè ce ne sono un mucchio...

In VB.NET comunque esiste eccome la libreria. Basta referenziare System.Management.
Personalmente proverei con questo semplice giro di istruzioni :

Dim SCR As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
For Each hdd As ManagementObject In SCR.Get()
MessageBox.Show(hdd("SerialNumber"))
Next

ma non è sempre detto che vada a buon fine ( dipende anche dal disco in questione )... ;)

Grazie per il tuo consiglio: mi hai dato lo spunto per sistemare una mia funzione che prima non andava bene e adesso è OK :mano: :

Private Function GetHddID() As String

Dim strHddID As String = String.Empty
Dim query As New SelectQuery("Win32_PhysicalMedia")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject

For Each info In search.Get()
If info("SerialNumber") <> "" Then
strHddID = info("SerialNumber").ToString
End If
Next info

If Trim(strHddID) = "" Then strHddID = "Cannot retrieve the serial number"
GetHddID = Trim(strHddID)

End Function

KLAX
26-08-2010, 16:11
Quì a seguire trovate un esempio di cio che viene rilevato nel caso di VB6 e VB2010:

http://img641.imageshack.us/img641/4697/20082010212208.th.png (http://img641.imageshack.us/i/20082010212208.png/)



Qualche soluzione?

Invece mi potresti dire come hai preso il seriale della motherboard?

lucausa75
26-08-2010, 18:24
Invece mi potresti dire come hai preso il seriale della motherboard?

Private Function GetMotherBoardID() As String

Dim strMotherBoardID As String = String.Empty
Dim query As New SelectQuery("Win32_BaseBoard")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject

For Each info In search.Get()
strMotherBoardID = info("SerialNumber").ToString()
Next info
If Trim(strMotherBoardID) = "" Then strMotherBoardID = "Cannot retrieve the serial number"
GetMotherBoardID = strMotherBoardID

End Function

KLAX
28-08-2010, 10:30
mille grazie