Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema con API GetVolumeSerialNumber
Forum - C# / VB.NET - Problema con API GetVolumeSerialNumber

Avatar
swet (Normal User)
Pro


Messaggi: 128
Iscritto: 01/01/2009

Segnala al moderatore
Postato alle 15:40
Martedì, 29/12/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

  1. 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
  2.  
  3. Private Function VolumeSerial(DriveLetter) As Long
  4.     Dim Serial As Long
  5.     Call GetVolumeSerialNumber(UCase(DriveLetter) & ":\", 0&, 0&, Serial, 0&, 0&, 0&, 0&)
  6.     VolumeSerial = Serial
  7. End Function
  8. 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

  1. Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID=""E:""")
  2.                 Dim diskProperty As PropertyData = disk.Properties("VolumeSerialNumber")
  3.                 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

  1. 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
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:39
Giovedì, 31/12/2009
Forse perchè non hai messo le virgolette...

PM Quote
Avatar
swet (Normal User)
Pro


Messaggi: 128
Iscritto: 01/01/2009

Segnala al moderatore
Postato alle 16:06
Venerdì, 01/01/2010
Ciao sto provando così:
Codice sorgente - presumibilmente VB.NET

  1. Dim seriale As String
  2.         Dim s As String = "D:"
  3.         Dim disk As New ManagementObject("Win32_LogicalDisk.DeviceID=""s""")
  4.         Dim diskProperty As PropertyData = disk.Properties("VolumeSerialNumber")
  5.         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

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 17:35
Venerdì, 01/01/2010
Probabilmente perchè racchiudi la s tra virgolette e non indica più la tua variabile ma il carattere s

MsgBox("Win32_LogicalDisk.DeviceID=" & s & "")

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:04
Sabato, 02/01/2010
Testo quotato

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 & """""

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 11:51
Sabato, 02/01/2010
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?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:29
Lunedì, 04/01/2010
Semplicemente delle virgolette. D'altra parte tu hai scritto:

Testo quotato


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).

PM Quote