swet (Normal User)
Pro
Messaggi: 128
Iscritto: 01/01/2009
|
Salve a tutti, sto cercando di risalire al seriale del mio harddisk esterno tramite questa API che uso così:
Codice sorgente - presumibilmente VB.NET |
Private Declare Function GetVolumeSerialNumber Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As Long, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, ByVal lpMaximumComponentLength As Long, ByVal lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As Long, ByVal nFileSystemNameSize As Long) As Long Private Function VolumeSerial(DriveLetter) As Long Dim Serial As Long Call GetVolumeSerialNumber(UCase(DriveLetter) & ":\", 0&, 0&, Serial, 0&, 0&, 0&, 0&) VolumeSerial = Serial End Function MsgBox("Il seriale è:"& VolumeSerial("E")
|
Ma mi restituisce sempre 0 eppure la lettera del drive è esatta.
Potete aiutarmi?
Grazie
EDIT: Ho risolto così:
Codice sorgente - presumibilmente VB.NET |
Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID=""E:""") Dim diskProperty As PropertyData = disk.Properties("VolumeSerialNumber") seriale = diskProperty.Value.ToString()
|
Ma perché se l' unità la metto in quel modo funziona e se invece faccio così
Codice sorgente - presumibilmente C# / VB.NET |
Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID="&Mid(s, 1, 2)&"")
|
non va più?Mi dice parametro non valido.
Ultima modifica effettuata da swet il 29/12/2009 alle 17:46 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Forse perchè non hai messo le virgolette...
|
|
swet (Normal User)
Pro
Messaggi: 128
Iscritto: 01/01/2009
|
Ciao sto provando così:
Codice sorgente - presumibilmente VB.NET |
Dim seriale As String Dim s As String = "D:" Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID=""s""") Dim diskProperty As PropertyData = disk.Properties("VolumeSerialNumber") seriale = diskProperty.Value.ToString()
|
Mi evidenzia la linea Dim DiskProperty e mi dice:"NON TROVATO", però l' hard disk c' è,quindi a cosa è dovuto questo errore?! Grazie
|
|
Alfonso (Ex-Member)
Guru
Messaggi: 688
Iscritto: 30/09/2009
|
Probabilmente perchè racchiudi la s tra virgolette e non indica più la tua variabile ma il carattere s
MsgBox("Win32_LogicalDisk.DeviceID=" & s & "")
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da Alfonso:
Probabilmente perchè racchiudi la s tra virgolette e non indica più la tua variabile ma il carattere s
MsgBox("Win32_LogicalDisk.DeviceID=" & s & "") |
Anche qui mancano le virgolette...
"Win32_LogicalDisk.DeviceID="""" & s & """"" |
|
Alfonso (Ex-Member)
Guru
Messaggi: 688
Iscritto: 30/09/2009
|
Purtroppo non sono riuscito a capire come usare il ManagementObject, non ho scoperto quale Import usare, e mi sono affidato alla logica vb6 (ormai troppo radicata) usando MsgBox per evidenziare come inglobare la variabile nell'istruzione.
Comunque ditemi: cosa sottintendono tutte quelle virgolette?
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Semplicemente delle virgolette. D'altra parte tu hai scritto:
EDIT: Ho risolto così:
Codice sorgente - presumibilmente Visual Basic
Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID=""E:""")
Dim diskProperty As PropertyData = disk.Properties("VolumeSerialNumber")
seriale = diskProperty.Value.ToString()
Ma perché se l' unità la metto in quel modo funziona e se invece faccio così
Codice sorgente - presumibilmente Php
Dim disk as new ManagementObject("Win32_LogicalDisk.DeviceID="&Mid(s, 1, 2)&"")
non va più?Mi dice parametro non valido. |
L'unica differenza tra il primo e il secondo codice è che nel primo ci sono le virgolette intorno al nome del volume (""E:"" > "E:"), mentre nel secondo no ("" indica una stringa vuota e non delle virgolette). |
|